[英]How to disallow caching in struts2?
在我的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");
因为您的代码中有错误,所以您无法应用此拦截器,在修复该错误之后,您可以使用它来防止缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.