注销后单击后退按钮后页面不安全

Cro*_*wie 6 javascript mobile spring spring-mvc spring-security

在我之前的工作中,我遇到了一个众所周知的问题,即无法阻止用户在退出后使用后退按钮导航网站.我的技术包括Spring,JavaScript以及Java AJAX库ZK的Mobile模块.除了使用后退按钮导航外,授权访问也起作用.我无法再访问应用程序代码.该应用程序是移动应用程序,我不是原作者.

我尝试了以下常见解决方案:


我们在以下定义中t2-spring-security-context.xml:

<http auto-config="true">
    <intercept-url pattern="/mobile-index*" access="ROLE_ADMIN"/>
    <intercept-url pattern="/t2-metrics*" access="ROLE_ADMIN"/>
    <intercept-url pattern="/t2-monitor*" access="ROLE_ADMIN"/>
    <form-login login-page="/login.jsp" authentication-failure-url="/loginerror.jsp"
                default-target-url="/mobile-index.jsp"/>
    <logout logout-success-url="/login.jsp" invalidate-session="true"/>

</http>
Run Code Online (Sandbox Code Playgroud)


其他有关我们实施的细节:

  • @RequestMapping在注释为的类上使用JavaScript 调用Java方法@Controller(IE t2-metrics.jsp具有JS以触发URL匹配请求映射)
  • 尝试向security:global-method-security方法添加应用程序上下文和角色注释
  • 使用scriptlet代码禁用对JSP页面的缓存,并且没有做任何事情.此外,在IntelliJ中调试应用程序,并且我的定义过滤器中的调试点未被命中.
  • 一旦他们使用后退按钮返回应用程序,用户仍然可以在应用程序中导航.

我唯一的想法是,问题涉及我们的客户端代码(JavaScript)或库(与Spring安全性的错误集成),因为调试没有达到Spring Security过滤器链.

Raj*_*eep 9

在servlet-context文件中使用以下代码

    <mvc:interceptors>
        <bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
                <property name="cacheSeconds" value="0"/>
                <property name="useExpiresHeader" value="false"/>
                <property name="useCacheControlHeader" value="true"/>
                <property name="useCacheControlNoStore" value="true"/>
            </bean>     
        </mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)

它将与jsp页面中的以下代码相同:

  response.setHeader("pragma", "no-cache");              
  response.setHeader("Cache-control", "no-cache, no-store, must-revalidate");             
  response.setHeader("Expires", "0"); 
Run Code Online (Sandbox Code Playgroud)


sma*_*rld 0

我们不使用 Spring security,所以我不熟悉它的所有配置属性,但如果我是你,我会从研究浏览器缓存问题开始。应该很容易测试...(1)点击后退按钮后强制重新加载页面,或者(2)注销后,清除浏览器缓存(不是cookie),然后点击后退按钮。如果这导致了所需的行为,那么下一步应该包含 HTTP 响应标头属性来控制浏览器缓存。

如果不是这样,那么我就不知道要在 Spring 安全配置中寻找什么。希望其他人可以知道答案。

编辑:刚刚发现另一个类似的问题,确认浏览器缓存问题部分 - 该问题的答案包含他们用于设置响应标头的机制,以防万一这对您有帮助 - Spring Security Logout Back Button