用户登录后如何限制使用JSF 2访问某些页面?

时间:2013-08-21 21:55:25

标签: security jsf-2

我想根据用户访问权限限制对某些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?

1 个答案:

答案 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

另见: