0

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

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

4

1 回答 1

3

首先,您根本不应该为工作使用阶段侦听器,而是使用servlet 过滤器。阶段侦听器仅在 JSF 请求上运行,即仅与FacesServlet. 阶段侦听器是一种笨拙的方法,仅用于授权检查。

这是一个具体的启动示例,说明此类过滤器的外观,假设您已将登录用户存储为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);
        }
    }

    // ...
}
于 2012-12-23T19:50:28.300 回答