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

Joh*_*n N 6 security jsf-2

我想根据用户访问权限限制对某些JSF页面的访问.如何在JSF中做到这一点?我找到了两个链接:通过直接更改JSF中的URL来限制用户访问页面.但答案没有提到如何阻止访问页面.用response.sendError?第二个链接:JSF:如何控制JSF中的访问权限和权限?

还有什么最好使用PhaseListener或使用ServletFilter?

Bal*_*usC 8

但答案没有提到如何阻止访问页面.有了response.sendError吗?

这完全取决于您的选择.这一切都取决于您的业务需求.要重定向到登录页面吗?就这样做!

response.sendRedirect(request.getContextPath() + "/login.xhtml");
Run Code Online (Sandbox Code Playgroud)

或者,你想显示一个可怕的和用户不友好的HTTP 401错误?就这样做!

response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
Run Code Online (Sandbox Code Playgroud)

至少,除了继续对受限资源的请求之外的任何事情chain.doFilter().否则整个限制将毫无意义.


还有什么最好使用PhaseListener或使用ServletFilter?

servlet过滤器旨在拦截HTTP请求,并且只在FacesServlet调用之前运行一次,因此能够挂钩非JSF请求,具体取决于URL模式.

根据当前的JSF阶段,相位监听器被设计为在JSF请求期间拦截每个JSF阶段(有6个)的前后条件并运行2到12次.

你的常识说什么?对于允许/阻止HTTP请求(因而不是JSF阶段)的非常简单的工作,哪一个看起来更简单有效?只需使用合适的工具即可完成工作.


对于您感兴趣的情况,这是一个相当完整的此类授权过滤器示例:会话过期的授权重定向不适用于提交JSF表单,页面保持不变.

也可以看看:

  • 使用`response.sendRedirect()`重定向.要了解有关基本过滤器和servlet的更多信息,另请参阅http://stackoverflow.com/tags/servlet-filters/info和http://stackoverflow.com/tags/servlets/info (2认同)

归档时间:

查看次数:

4519 次

最近记录:

13 年,1 月 前