【问题标题】:Java Session invalidate and timeout does not workJava 会话无效和超时不起作用
【发布时间】:2014-09-03 01:15:50
【问题描述】:

一切正常,但注销和会话销毁不起作用,我不知道为什么。

如果会话无效或会话超时,为什么我可以访问受保护区域。

看看这个HTTP-Server-Monitor

'http://localhost:8080/psg/admin/'

<security-constraint>
    <display-name>My First Sec Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
        ..

登录 Servlet 映射到 /admin/

    HttpSession session = request.getSession();

    if (session != null) {
        session.setAttribute("ID", session.getId());
        session.setAttribute("User", request.getRemoteUser());
        session.setAttribute("isAuthenticated", true);
        getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
    }     

注销 Servlet 映射到 /admin/logout

    HttpSession session = request.getSession(false);

    if(session!=null){
        session.invalidate();
        response.sendRedirect(request.getContextPath());
    }

如果会话超时必须销毁会话,则同样的问题。 如果我进入保护区 /psg/admin/

,我也可以在此 Duration 之后获得有效会话
<session-timeout>1</session-timeout>

【问题讨论】:

  • 您使用的是基本身份验证吗?那么您的注销将无法正常工作,因为浏览器会在每次请求时重新发送用户凭据。
  • 是的,我使用 Digist 身份验证。我认为类似于基本。感谢 Gas 的帮助。

标签: java security session servlets timeout


【解决方案1】:

在基本和摘要身份验证的情况下,浏览器将重新发送用户凭据,因此实际上没有注销,只有会话失效。

您需要使用基于表单的身份验证才能注销。

【讨论】:

  • 基于表单的身份验证是指 Spring 安全性吗?你能举个例子吗?
  • @Lucky 不,我的意思是基于 Java EE 表单的身份验证,与 Spring 无关。正确的 Java EE 身份验证在 web.xml 文件的 &lt;login-config&gt;&lt;auth-method&gt;FORM&lt;/auth-method&gt;... 元素中定义。
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 2016-01-21
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2014-12-13
相关资源
最近更新 更多