小编典典

如何禁止在struts2中缓存?

java

在我的Web应用程序中,当用户注销时,他应该无权访问他登录时先前查看过的页面。但是,由于浏览器缓存,他可以在单击后退按钮时查看这些页面。

我定义了一个拦截器来处理此问题:

public String intercept(ActionInvocation invocation) throws Exception {
        // TODO Auto-generated method stub

        final ActionContext context = invocation.getInvocationContext();
        HttpServletResponse response = (HttpServletResponse)context.get(StrutsStatics.HTTP_RESPONSE);
        if(response!=null){
            response.setHeader("Cache-control", "no-cache, no-store");
            response.setHeader("Pragme", "no-cache");
            response.setHeader("Expires", "-1");

        }

        return invocation.invoke();
    }

并在struts.xml

   <interceptors>

   <interceptor name="cachingHeadersInterceptor" class="com.prosonsulto.interceptor.CachingHeadersInterceptor"/>
   <interceptor-stack name="defaultSecurityStack">
   <interceptor-ref name="defaultStack"/>
   <interceptor-ref name="cachingHeqadersInterceptor"/>
   </interceptor-stack>

   </interceptors>

发生的事情是,添加此代码后,运行应用程序时出现404错误。

我尝试在页面中添加响应标题:

<%response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", -1);
response.setHeader("Pragma", "no-cache");
%>

但是必须将它一个接一个地添加到所有页面上是很麻烦的。另外,用户始终可以重新提交表单并再次访问那些页面,而无需实际输入其登录凭据。

理想情况下,我应该怎么做才能防止浏览器缓存?


阅读 350

收藏
2020-11-23

共1个答案

小编典典

更改此代码

response.setHeader("Pragme", "no-cache");

response.setHeader("Pragma", "no-cache");

因为您的代码中有错误,所以您无法应用此拦截器,在修复该错误之后,您可以使用它来防止缓存。

2020-11-23