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

しかし、それは機能していません。進むボタンと戻るボタンを押している間もページを取得できます。助けてください。私はすでにすべての既存のキャッシュをクリアしました。

4

1 に答える 1

1

init()フィルタとの間に意図的に例外をスローしないでくださいdestroy()。例外がスローされた場合init()、フィルターはサービスに配置されず、一部のサーバーはWebアプリのデプロイを完全に中止します。

そこに実装するものがなければ、彼らは何もしないはずです。

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

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

また、フィルターが適切なURLパターンまたはサーブレット名にマップされていることを確認する必要があります。最も簡単なのは、にあるエントリの正確なサーブレット名である@WebFilter("Faces Servlet")クラスにを置くことです。Faces ServletFacesServletweb.xml

于 2012-04-10T14:02:16.450 に答える