3

システムの承認を行うためにサーブレットフィルターを実装しました。必要に応じて、これを使用してユーザーをリダイレクトします。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    ...

    if(!isLoggedIn(currentUser)){
        if(isSecurePage(requestedPage)){
            redirectUser(resp,USER_LOGIN_PAGE);
        }
        else{ // Carry on
            chain.doFilter(request,response);
        }
    }
    else{
        if(!isSecurePage(requestedPage)){
            redirectUser(resp,USER_WELCOME_PAGE);
        }
        else if(!canAccess(currentUser,requestedPage)){
            redirectUser(resp,req.getContextPath() + USER_DENIED_PAGE);
        }
        else{ // Carry on
            chain.doFilter(request,response);
        }
    }
}

private void redirectUser(HttpServletResponse response, String page) throws IOException {
    response.sendRedirect(page);
}

リダイレクトは正しく行われます。私の問題は、ACCESS_DENIED_PAGE が表示されても、元のリクエストの背後にある JSF アクション メソッドがまだ実行されていることです (たとえば、作成した FacesMessage が ACCESS_DENIED_PAGE に表示されます)。

これを防ぐ方法は?

4

0 に答える 0