带有/ j_spring_security_logout的Spring-Security可能无法完全注销

时间:2012-05-06 14:09:15

标签: spring-security

所以我试图确定这是一个错误或浏览器缓存,或者我是否遗漏了什么,但是当我退出时,我可以访问之前访问过的任何页面。我甚至有一个ajax调用休息端点,当我打电话给我打印响应并获得200 ok。

现在,如果我单击logout,它将返回到具有无效会话url参数的登录页面。因此看起来它正在尝试删除会话,如果我完全关闭浏览器,而不仅仅是选项卡,我无法再访问之前能够访问的页面。但是,如果我不关闭浏览器,我可以访问我已经访问过的任何页面,我还没有访问的页面将我转发到登录页面。它让我想知道它是否是一个浏览器缓存问题,但ajax请求上的200ok让我怀疑。

Spring-Security 3.1.0版

这是我的注销配置。

<logout invalidate-session="true" logout-success-url="/login-page.html?logout=true"
        logout-url="/j_spring_security_logout" />
    <session-management invalid-session-url="/login-page.html?session=invalid">
        <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
    </session-management>

在web.xml中我添加了这个监听器

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

更新

这确实是一个浏览器缓存问题,所以要修复它我添加到DispatcherServlet xml

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
     <property name="cacheSeconds" value="0" />
 </bean>

还将META标签添加到头部

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">

现在禁用所有网页和其他方法的缓存。

1 个答案:

答案 0 :(得分:4)

确实,它看起来像是一个缓存问题:

  • 尝试使用一些额外的随机参数访问已访问过的网页
  • ...尝试使用AJAX调用(只需附加?random= + Math.random()
  • 同时尝试POST使用AJAX,因为GET更有可能被缓存。
  • 最后查看Firebug或任何其他监视工具(或服务器端的访问日志)以确认请求已缓存。如果缓存是问题,请调查浏览器决定缓存资源的原因。