我想根据用户访问权限限制对某些JSF页面的访问。如何在JSF中做到这一点?我找到了两个链接:Restricting users from accessing pages by directly changing the URL in JSF。
但答案并没有提到如何阻止访问页面。使用response.sendError
?
第二个链接:JSF: How control access and rights in JSF?
还有什么最好使用PhaseListener或使用ServletFilter?
答案 0 :(得分:8)
但答案没有提到如何阻止访问页面。使用response.sendError?
这完全取决于您的选择。这一切都取决于您的业务需求。要重定向到登录页面吗?就这样做!
response.sendRedirect(request.getContextPath() + "/login.xhtml");
或者,您是否想要显示一个可怕的,用户不友好的HTTP 401错误?就这样做!
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
至少任何,但chain.doFilter()
继续向受限资源发送请求。否则整个限制将毫无意义。
还有什么最好使用PhaseListener或使用ServletFilter?
servlet过滤器旨在拦截HTTP请求,并且只在调用FacesServlet
之前运行一次,因此能够挂钩非JSF请求,具体取决于URL模式。
一个阶段监听器被设计为拦截每个JSF阶段的前后条件(有6个),并在JSF请求期间运行2到12次,具体取决于当前的JSF阶段。
您的常识是什么意思?对于允许/阻止HTTP请求(因而不是JSF阶段)的非常简单的工作,哪一个看起来更简单有效?只需使用合适的工具即可完成工作。
对于您感兴趣的案例,以下是此类授权过滤器的完整示例:Authorization redirect on session expiration does not work on submitting a JSF form, page stays the same。