WebFilter基于用户角色

时间:2014-01-23 11:57:19

标签: jsf-2 servlet-filters

这是我的登录过滤器类:

@WebFilter(urlPatterns = {"/backend/*", "/frontend/manager/*", "/frontend/faculty/*"})
public class AuthorizationFilter extends HttpFilter {

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response,
            HttpSession session, FilterChain chain) throws ServletException, IOException {
        UserManagedBean user = session != null ? (UserManagedBean) session.getAttribute("userManagedBean") : null;
        if (user != null && user.isLoggedIn()) {
            chain.doFilter(request, response);
        } else {
            response.sendRedirect(request.getContextPath() + "/frontend/login.xhtml?faces-redirect=true");
        }
    }
}

有没有让过滤器类自动过滤用户到我根据角色配置的urlPatterns?

例如,如果我是管理员,那么过滤器将允许我访问/backend/*。如果我是经理,那么过滤器将允许我访问/frontend/manager/*并禁止其他人(后端,教师)。

1 个答案:

答案 0 :(得分:1)

不,过滤器不支持基于角色的URL匹配。为此,您应该使用<security-constraint>条目而不是使用servlet过滤器的自制安全性来使用Java EE内置容器管理的安全性。在这些<security-constraint>条目中,您可以按<web-resource-collection><url-pattern>和角色<auth-constraint><role-name>声明网址格式。

在过滤器内部,您可以做的最好是手动检查HttpServletRequest#isUserInRole()

另见: