2

我为我的 Java/Tomcat 应用程序创建了一个过滤器,它使用 spnego 通过 kerberos 对用户进行身份验证。除非用户关闭了 IWA(集成 Windows 身份验证),否则它的效果非常好。过滤器所做的第一件事是设置 SC_UNAUTHORIZED (401) 以便让浏览器进行协商。

httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED, true);

一旦发生这种情况,它将运行相同的路径并一遍又一遍地失败,并最终得到一个空白页面。我所做的是添加一个会话变量来计算失败次数。三次失败后,我想清除 SC_UNAUTHORIZED 并让页面继续加载。所有这一切都意味着用户最终会进入网站但没有登录,这很好。

我试过这个来清除标志,但它什么也没做:

System.out.println("check status 1: " + httpResponse.getStatus());
httpResponse.setStatus(HttpServletResponse.SC_OK);
System.out.println("check status 2: " + httpResponse.getStatus());

两个打印件仍然是 401。我原以为第二个打印件是 200。设置后如何更改 SC_UNAUTHORIZED?我知道我只是缺少一些简单的东西。

4

1 回答 1

0

您是否尝试过以下操作:

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);

如果是基本身份验证,您还可以在sendError

httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"mycustomrealm\"");
于 2012-08-28T15:56:21.277 回答