【问题标题】:How to clear status 401 HttpServletResponse.SC_UNAUTHORIZED?如何清除状态 401 HttpServletResponse.SC_UNAUTHORIZED?
【发布时间】:2012-04-27 22:46:57
【问题描述】:

我为我的 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?我知道我只是缺少一些简单的东西。

【问题讨论】:

  • 也许您可以将重定向发送到进行基于表单的身份验证的 servlet?

标签: java servlets servlet-filters


【解决方案1】:

您是否尝试过以下操作:

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);

如果是basic auth,也可以在sendError之前设置header:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 2015-12-01
    • 2013-09-20
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多