java - struts2中如何禁止缓存?

标签 java jakarta-ee struts2 http-caching struts2-interceptors

在我的 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 错误。

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

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

但是必须将其逐一添加到所有页面,这会很乏味。另外,用户始终可以重新提交表单并再次访问这些页面,而无需实际输入其登录凭据。

我应该怎样做才能防止浏览器缓存?

最佳答案

更改此代码

来自

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

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

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

关于java - struts2中如何禁止缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481871/

相关文章:

java - 尝试通过 toString() 打印对象

Java-双变量问题

java - Android 如何保存 ListView 的状态

jakarta-ee - JBOSS 和 Tomcat6 的加密数据源密码

mysql - 在哪里可以找到 NetBeans 的 MySQL 路径/URL?

jquery - Struts 2 jquery 插件网格 (jqGrid) 与 groupField 和 rownumbers

java - Websocket 无法建立连接

java - 舞台中额外的顶部空间是否包含在场景的大小中?

java - HTTP 404 - 没有映射与上下文路径 [/FormularioMD] 关联的命名空间 [/modeldriven] 和操作名称 [datosUsuario] 的操作

java - 如何从speechMatics中获取转录文本