如何清除状态401 HttpServletResponse.SC_UNAUTHORIZED?

时间:2012-04-16 15:19:57

标签: java servlets servlet-filters

我为我的Java / Tomcat应用程序创建了一个Filter,它使用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你怎么改?我知道我只是缺少一些简单的东西。

1 个答案:

答案 0 :(得分:0)

您是否尝试过以下操作:

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);

如果是基本身份验证,您还可以在sendError之前设置标头:

httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"mycustomrealm\"");