/**
*
*/
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.");
}
}
但它不起作用,我仍然可以在按下前进和后退按钮的同时获取页面。 请帮忙。我已经清除了所有现有的缓存。
答案 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
,其中FacesServlet
是web.xml
条目的确切servlet名称。{/ 1}}。