BrowserCache删除无法正常工作

时间:2012-04-10 10:19:03

标签: jsf servlet-filters browser-cache

/**
 * 
 */


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.");
    }
}

但它不起作用,我仍然可以在按下前进和后退按钮的同时获取页面。 请帮忙。我已经清除了所有现有的缓存。

1 个答案:

答案 0 :(得分:1)

在过滤器init()destroy()期间,您不应故意抛出异常。如果init()抛出异常,则过滤器不会投入使用,某些服务器甚至会完全中止webapp的部署。

如果你没有什么可以实现的话,他们应该 nothing

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

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

您还需要确保过滤器映射到正确的URL模式或servlet名称。最简单的方法是在@WebFilter("Faces Servlet")上添加Faces Servlet,其中FacesServletweb.xml条目的确切servlet名称。{/ 1}}。