Spring security 带/j_Spring_Security_注销的Spring Security可能未完全注销

Spring security 带/j_Spring_Security_注销的Spring Security可能未完全注销,spring-security,Spring Security,因此,我试图确定这是否是一个bug或浏览器缓存,或者我是否遗漏了什么,但当我注销时,我可以访问我以前访问过的任何页面。我甚至有一个对rest端点的ajax调用,当我调用该调用时,我打印响应并得到一个200 ok 现在,如果单击“注销”,它将返回到带有无效会话url参数的登录页面。因此,它看起来像是在试图删除会话,另外,如果我完全关闭浏览器,而不仅仅是选项卡,我将无法再访问以前可以访问的页面。但是如果我不关闭浏览器,我可以访问我已经访问过的任何页面,我还没有访问过的页面会将我转发到登录页面。这让我

因此,我试图确定这是否是一个bug或浏览器缓存,或者我是否遗漏了什么,但当我注销时,我可以访问我以前访问过的任何页面。我甚至有一个对rest端点的ajax调用,当我调用该调用时,我打印响应并得到一个200 ok

现在,如果单击“注销”,它将返回到带有无效会话url参数的登录页面。因此,它看起来像是在试图删除会话,另外,如果我完全关闭浏览器,而不仅仅是选项卡,我将无法再访问以前可以访问的页面。但是如果我不关闭浏览器,我可以访问我已经访问过的任何页面,我还没有访问过的页面会将我转发到登录页面。这让我怀疑这是否是浏览器缓存问题,但ajax请求上的200ok让我怀疑这一点

Spring安全版本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>

org.springframework.security.web.session.HttpSessionEventPublisher
更新

这确实是一个浏览器缓存问题,因此为了解决它,我将其添加到DispatcherServlet xml中

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

还将META标记添加到head

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


现在,这将禁用所有“我的页面”和rest方法的缓存。

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

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

我看了firebug,奇怪的是,有时候,不总是,我在rest调用中得到302。我想试试你的建议。好的,肯定是缓存问题,你的回复让我想尝试将服务器置于调试模式,在get中添加一个断点,我只在第一次点击服务器时点击它。否则它永远不会点击它。现在如何操作在浏览器中为Jersey rest方法恢复缓存。将其添加到DispatcherServlet xml文件,并用于禁用缓存