当前位置: 首页 > 面试题库 >

如何禁止在struts2中缓存?

华煜祺
2023-03-14
问题内容

在我的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");
%>

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

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


问题答案:

更改此代码

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

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

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



 类似资料:
  • 本文向大家介绍如何禁止html页面缓存?相关面试题,主要包含被问及如何禁止html页面缓存?时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 当我使用Alamofire两次发送GET请求时,我得到的响应是相同的,但是我期望得到不同的响应。我想知道这是否是由于缓存造成的,如果是这样,我想知道如何禁用它。 问题答案: 迅捷3,alamofire 4 我的解决方案是: 为Alamofire创建扩展: 并使用它:

  • 问题内容: 我正在尝试在特定网站上抓取网页。该网页因我发送的不同Cookie的设置而有所不同。 如果我一一请求到网页,它给我正确的结果,但是当我在for循环中发送这些cookie时,它给了我相同的结果。我认为scrapy正在为我创建缓存,并在第二个请求中从缓存中获取响应。这是我的代码: 我希望print语句应为两个请求提供不同的结果。 如果不清楚,请在评论中提及。 问题答案: 缓存可以通过两种方式

  • 问题内容: 使用时出现缓存问题。 我用来将数据插入MySQL数据库。然后,我有另一个应用程序处理此数据,并直接对其进行更新。 但是总是返回旧数据而不是更新数据。我认为已缓存了我的请求……所以……我应如何禁用它? 问题答案: 人们通常认为,除了在事务本地使用的常规SQLAlchemy身份映射之外,还存在“缓存”的作用,这是因为他们正在观察事务隔离的影响。默认情况下,SQLAlchemy的会话在事务模

  • 问题内容: 我正在尝试编写一个单元测试类,该类必须使用相同的查询以相同的测试方法两次从数据库中获取结果。但是,由于第二次启用了Hibernate缓存,因此它实际上并没有访问数据库,只是从缓存中获取结果。 有人可以回答如何禁用中的缓存。 但是它没有用。 问题答案: 有人可以回答如何在persistence.xml中禁用缓存。 默认情况下,第二级缓存和查询缓存是禁用的(除非您显式缓存它们,否则不会缓存

  • 问题内容: 我编写了一个简单的中继脚本,该脚本连接到网络摄像机并从套接字读取数据,并使用打印功能输出此数据。数据是已设置边界的MJPG数据。我只是输出读取的数据。 问题是PHP似乎正在缓冲这些数据。当我将相机设置为1 FPS时,Feed将冻结7-8秒,然后快速显示8帧。如果将分辨率设置为很大,则相机每秒将以大约1帧的速度移动。我认为那时正在发生一些缓冲(因为大尺寸的缓冲区会很快填充,而小尺寸的缓冲