【发布时间】:2014-09-03 01:15:50
【问题描述】:
一切正常,但注销和会话销毁不起作用,我不知道为什么。
如果会话无效或会话超时,为什么我可以访问受保护区域。
'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