Spring Security:后退按钮出现问题

时间:2011-07-19 14:05:37

标签: java spring-security logout back-button

我正在尝试使用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");

浏览器有问题吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

servlet API有两种从请求中获取会话的方法:

getSession()

getSession(boolean create)

第一种方法总是返回一个会话,如果不存在则创建新会话。第二种方法可用于控制是否应该创建新会话。

话虽如此,我认为这不是一个问题。空会话通常不会影响应用程序的安全性或其他任何内容(除了内存占用空间很小)。


修改

在注销过程中,某些重定向可能会导致另一个建立新会话的请求。如果你真的想要追踪它,使用firebug或类似的工具来跟踪注销序列中的所有请求,并比较每个请求的jsessionid cookie。

答案 1 :(得分:0)

实现此检查的一种可能方法是验证SecurityContext,而不是验证过滤器中的HttpSession