2012-04-16 148 views
2

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

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

也许你可以发送重定向到servlet,它基于表单的身份验证? – 2012-04-30 01:57:27

回答

0

你有没有尝试以下方法:

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED); 

如果是基本身份验证,你也可以设置前sendError头:

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