所以我试图确定这是一个错误还是浏览器缓存,或者我是否遗漏了一些东西,但是当我注销时,我可以访问我之前访问过的任何页面。我什至有一个对休息端点的 ajax 调用,当我调用它时,我打印响应并得到 200 ok。
现在,如果我单击注销,它会返回带有无效会话 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">
这现在禁用了我所有页面和休息方法的缓存。