我为我的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你怎么改?我知道我只是缺少一些简单的东西。
答案 0 :(得分:0)
您是否尝试过以下操作:
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
如果是基本身份验证,您还可以在sendError
之前设置标头:
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"mycustomrealm\"");