我想根据用户访问权限限制对某些 JSF 页面的访问。如何在 JSF 中做到这一点?我找到了两个链接:通过直接更改 JSF 中的 URL 来限制用户访问页面。但是答案没有提到如何阻止对页面的访问。与response.sendError
?第二个链接:JSF:JSF中如何控制访问和权限?
还有什么是最好的使用 PhaseListener 或使用 ServletFilter ?
我想根据用户访问权限限制对某些 JSF 页面的访问。如何在 JSF 中做到这一点?我找到了两个链接:通过直接更改 JSF 中的 URL 来限制用户访问页面。但是答案没有提到如何阻止对页面的访问。与response.sendError
?第二个链接:JSF:JSF中如何控制访问和权限?
还有什么是最好的使用 PhaseListener 或使用 ServletFilter ?
但是答案没有提到如何阻止对页面的访问。有 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 阶段),哪一个看起来更简单有效?只需使用正确的工具来完成这项工作。
如果您有兴趣,这里有一个相当完整的授权过滤器示例:会话到期时的授权重定向在提交 JSF 表单时不起作用,页面保持不变。