我已配置过滤器以禁用我的浏览器后退按钮,并将用户显示为会话已过期。当我在我的应用程序原型中配置它时,它正在按预期工作,但当我将它合并到我的(spring MVC)应用程序时,它无法正常工作。
我已按此配置了我的过滤器
<filter>
<filter-name>backButtonFilter</filter-name>
<filter-class>
com.filters.BackButtonFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>backButtonFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我的过滤器内容就像这样
response.setHeader("cache-control", "no-cache, no-store, must-revalidate");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", 0);
response.setHeader("Cache-Type", "private");
我已经介绍了日志语句,以查看我的过滤器是否正在执行。我可以看到它正在执行。
为什么会这样?
答案 0 :(得分:2)
我建议使用Firebug检查浏览器端的HTTP标头吗?这应该会让人更容易理解为什么他们没有按预期工作。
编辑需要注意的一点是,确保在HTTP正文之前写出HTTP标头。
答案 1 :(得分:0)
尝试在Servlet Context中配置拦截器,如下所示:
<!-- configuration for handling browser back button -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*"/>
<beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<beans:property name="cacheSeconds" value="0"/>
<beans:property name="useExpiresHeader" value="true"/>
<beans:property name="useCacheControlHeader" value="true"/>
<beans:property name="useCacheControlNoStore" value="true"/>
</beans:bean>
</mvc:interceptor>
</mvc:interceptors>
但无论会话是否有效,都应该在您的视图中验证或处理(HTML或JSP)。您可以在视图中使用以下元标记来表示no-cache和no-store
<meta http-equiv="Cache-control" content="no-cache">
或
<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache,Must-Revalidate,No-Store">
如果您使用GET提交表单,则用户始终可以通过按后退按钮转到结果屏幕。
如果您使用POST,浏览器会说这可能无法实现。