如何在JSF项目中调用HTML5文件时检查授权

时间:2012-12-23 18:41:59

标签: html5 jsf-2 authorization userid phaselistener

我定义了一个PhaseListener来检查JSF项目中的授权。但它不适用于HTML5。即使我在web.exml中为servlet映射添加了url = * .html,它也不适用于HTML5。因为JSF2不支持HTML5的某些标记。如帆布等

在JSF项目中调用HTML5文件时,如何检查授权?

1 个答案:

答案 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);
        }
    }

    // ...
}