我正在尝试使用Spring安全提供的注销功能。
退出工作正常。会话失效(通过在 SecurityContextLogoutHandler 类中调用注销方法)。用户被重定向到登录页面。
然而,当我按下后退按钮时,我看到下面的代码具有有效的会话ID req.getRequestedSessionId()是 NOT null。 新会话已创建。
if (req.getRequestedSessionId() != null &&
!req.isRequestedSessionIdValid())
{
chain.doFilter(request, response);
return;
}
我们在 LogoutFilter 中也有以下代码。
HttpServletResponse resp = (HttpServletResponse) res;
resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
resp.setHeader("Last-Modified", new Date().toString());
resp.setHeader("Cache-Control", "no-store, no-cache,
must-revalidate, max-age=0,
post-check=0, pre-check=0");
resp.setHeader("Pragma", "no-cache");
浏览器有问题吗?我错过了什么吗?
答案 0 :(得分:0)
servlet API有两种从请求中获取会话的方法:
和
第一种方法总是返回一个会话,如果不存在则创建新会话。第二种方法可用于控制是否应该创建新会话。
话虽如此,我认为这不是一个问题。空会话通常不会影响应用程序的安全性或其他任何内容(除了内存占用空间很小)。
修改强>
在注销过程中,某些重定向可能会导致另一个建立新会话的请求。如果你真的想要追踪它,使用firebug或类似的工具来跟踪注销序列中的所有请求,并比较每个请求的jsessionid cookie。
答案 1 :(得分:0)
实现此检查的一种可能方法是验证SecurityContext
,而不是验证过滤器中的HttpSession
。