2012-04-10 58 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