[英]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.