后退按钮过滤器不起作用

时间:2009-12-08 09:59:36

标签: javascript java spring spring-mvc back-button

我已配置过滤器以禁用我的浏览器后退按钮,并将用户显示为会话已过期。当我在我的应用程序原型中配置它时,它正在按预期工作,但当我将它合并到我的(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");

我已经介绍了日志语句,以查看我的过滤器是否正在执行。我可以看到它正在执行。

为什么会这样?

2 个答案:

答案 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,浏览器会说这可能无法实现。