次のフィルターを使用して、GlassFishをアプリケーションサーバーとして使用してJSF2.0のすべてのページへのアクセスを制御しています。問題は、このコードでは、フィルターは正常に機能し、ユーザーが他のページに直接アクセスしようとするとlog.xhtmlにリダイレクトされますが、login.xhtmlは見栄えがよくない(色付きの画像が表示されず、ページの形状が変更されている)場合です。なれ。ただし、sendRedirectステートメントを削除してchain.doFilterステートメントに置き換えると、ページは見栄えが良くなるはずのように表示されますが、フィルタリングは明らかに機能しません。この問題を解決するにはどうすればよいですか?
LoggingFilter.java
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
LoginBean auth = (LoginBean) req.getSession().getAttribute("loginBean");
if ((auth != null && auth.isLoggedIn()) || req.getRequestURI().endsWith("/login.xhtml")) {
// User is logged in, so just continue request.
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpResponse.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);
} else {
// User is not logged in, so redirect to index.
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/faces/login.xhtml");
//FacesContext.getCurrentInstance().getExternalContext().dispatch("/login.xhtml");
//chain.doFilter(request, response);
}
}