3

所以我试图确定这是一个错误还是浏览器缓存,或者我是否遗漏了一些东西,但是当我注销时,我可以访问我之前访问过的任何页面。我什至有一个对休息端点的 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">

这现在禁用了我所有页面和休息方法的缓存。

4

1 回答 1

4

Indeed it really looks like a caching issue:

  • Try accessing already visited pages with some extra random parameter
  • ...try the same with AJAX call (just append ?random= + Math.random().
  • Also try POSTing using AJAX, as GET is much more likely being cached.
  • Finally have a look at Firebug or any other monitoring tool (or access log on the server side) to confirm the request was cached. If caching is the problem, investigate why browser decides to cache your resources.
于 2012-05-06T14:23:45.983 回答