我定义了一个PhaseListener来检查JSF项目中的授权。但它不适用于HTML5。即使我在web.exml中为servlet映射添加了url = * .html,它也不适用于HTML5。因为JSF2不支持HTML5的某些标记。如帆布等
在JSF项目中调用HTML5文件时,如何检查授权?
答案 0 :(得分:3)
首先,你应该根本没有使用阶段监听器,而是servlet filter。阶段侦听器仅在JSF请求上运行,即仅与FacesServlet
的URL模式匹配的请求。阶段监听器是一种笨拙的方法,仅用于授权检查。
这是一个具体的启动示例,说明这样一个过滤器的样子,假设您已将登录用户作为User
对象存储在会话中:
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
User user = (session != null) ? session.getAttribute("user") : null;
String loginURL = request.getContextPath() + "/login.xhtml";
boolean loginRequest = request.getRequestURI().startsWith(loginURL);
boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER);
if (user != null || loginRequest || resourceRequest)) {
chain.doFilter(request, response);
} else {
response.sendRedirect(loginURL);
}
}
// ...
}