这是我的登录过滤器类:
@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/*
并禁止其他人(后端,教师)。
答案 0 :(得分:1)
不,过滤器不支持基于角色的URL匹配。为此,您应该使用<security-constraint>
条目而不是使用servlet过滤器的自制安全性来使用Java EE内置容器管理的安全性。在这些<security-constraint>
条目中,您可以按<web-resource-collection><url-pattern>
和角色<auth-constraint><role-name>
声明网址格式。
在过滤器内部,您可以做的最好是手动检查HttpServletRequest#isUserInRole()
。