在我之前的工作中,我遇到了一个众所周知的问题,即无法阻止用户在注销后使用返回按钮浏览网站。我的技术包括 Spring、JavaScript 和可能的 Java AJAX 库 ZK 的 Mobile 模块。除了使用后退按钮导航之外,授权访问还可以正常工作。我不再有权访问应用程序代码。该应用程序是一个移动应用程序,我不是其中的原作者。
我尝试了以下常见解决方案:
- 已尝试添加一个
WebContentInterceptor
(按照此处的说明) - 使用此过滤器问题和有关插入附加过滤器的答案的组合定义了我自己的过滤器。调试期间不执行过滤器代码
- 添加
RequestMappingHandlerAdapter
到设置cacheSeconds
为 0
我们在 中有以下定义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>
关于我们实施的其他细节:
@RequestMapping
使用注释为的类从 JavaScript调用 Java 方法@Controller
(IE t2-metrics.jsp 有 JS 触发到 URL 匹配请求映射)- 尝试将
security:global-method-security
应用程序上下文和角色注释添加到方法 - 有 scriptlet 代码来禁用对 JSP 页面的缓存,但什么也没做。此外,在 IntelliJ 中的调试中启动了应用程序,并且未命中我定义的过滤器中的调试点。
- 一旦他们使用后退按钮返回到应用程序,用户仍然可以在应用程序中导航。
我唯一剩下的想法是问题涉及我们的客户端代码(JavaScript)或库(与 Spring Security 的不正确集成),因为调试没有命中 Spring Security 过滤器链。