Spring security 带/j_Spring_Security_注销的Spring Security可能未完全注销
因此,我试图确定这是否是一个bug或浏览器缓存,或者我是否遗漏了什么,但当我注销时,我可以访问我以前访问过的任何页面。我甚至有一个对rest端点的ajax调用,当我调用该调用时,我打印响应并得到一个200 ok 现在,如果单击“注销”,它将返回到带有无效会话url参数的登录页面。因此,它看起来像是在试图删除会话,另外,如果我完全关闭浏览器,而不仅仅是选项卡,我将无法再访问以前可以访问的页面。但是如果我不关闭浏览器,我可以访问我已经访问过的任何页面,我还没有访问过的页面会将我转发到登录页面。这让我怀疑这是否是浏览器缓存问题,但ajax请求上的200ok让我怀疑这一点 Spring安全版本3.1.0 这是我的注销配置Spring security 带/j_Spring_Security_注销的Spring Security可能未完全注销,spring-security,Spring Security,因此,我试图确定这是否是一个bug或浏览器缓存,或者我是否遗漏了什么,但当我注销时,我可以访问我以前访问过的任何页面。我甚至有一个对rest端点的ajax调用,当我调用该调用时,我打印响应并得到一个200 ok 现在,如果单击“注销”,它将返回到带有无效会话url参数的登录页面。因此,它看起来像是在试图删除会话,另外,如果我完全关闭浏览器,而不仅仅是选项卡,我将无法再访问以前可以访问的页面。但是如果我不关闭浏览器,我可以访问我已经访问过的任何页面,我还没有访问过的页面会将我转发到登录页面。这让我
<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进行
ing,因为GET更有可能被缓存POST
- 最后,查看Firebug或任何其他监控工具(或服务器端的访问日志)以确认请求已缓存。如果缓存是问题所在,请调查浏览器决定缓存资源的原因