在筛选器重定向之后阻止JSF操作方法执行

时间:2012-06-11 16:40:59

标签: jsf redirect servlet-filters

我已经实现了一个Servlet过滤器来执行我的系统授权,在需要的地方我使用这个重定向用户:

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中。)

如何防止这种情况?

0 个答案:

没有答案