2012-04-10 54 views
0
/** 
* 
*/ 


public class NoCacheFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpReq = (HttpServletRequest) request; 
     HttpServletResponse httpRes = (HttpServletResponse) response; 

     if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc) 
      httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
      httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
      httpRes.setDateHeader("Expires", 0); // Proxies. 
     } 

     chain.doFilter(request, response); 
    } 

    // ... 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void destroy() { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

但它不工作,我仍然可以得到頁面,同時按下前進和後退按鈕。 請幫忙。我已經清除了所有現有的緩存。BrowserCache刪除不工作

回答

1

您不應在過濾器的init()destroy()期間有意拋出異常。如果init()引發異常,則該過濾器不會處於服務狀態,並且某些服務器甚至會完全中止Web應用程序的部署。

他們應該做沒有如果你沒有什麼可以在那裏實現。

@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
    // NOOP. 
} 

@Override 
public void destroy() { 
    // NOOP. 
} 

您還需要確保過濾器映射到正確的URL模式或servlet名稱。最容易的是把@WebFilter("Faces Servlet")放在這個類中,其中Faces ServletFacesServlet條目的確切servlet名稱,如web.xml中所示。

+0

謝謝它現在工作得很好。 – user1281029 2012-04-11 05:52:30