java - JSF2 - 限制某些 xhtml 页面访问的灵活方式,在访问上应用简单的逻辑

标签 java jsf jsf-2

嗨,我实际上正在尝试获取有关一个非常具体的问题的提示或想法。技术背景是 使用 JSF 2.1 的 Java Web 应用程序。

所以我有一个由 JSF 2.1 提供支持的简单 java ee 应用程序。结构如下

\webapp
   \WEB-INF
      \templates 
       header.xhtml
       menu.xhtml
      web.xml 
   \secured 
      \operation1
       op1.xhtml
     \operation2
       op2.xhtml
     \operation3
      op3.xhtml 
    userhome.xhtml
  login.xhtml

我有一个@WebFilter,它限制对/secured/*的访问,以防未设置“用户”bean(实际上是一个 session 范围的Bean)。

同时,在登录时,我根据用户凭据创建一个动态菜单。此菜单(MenuItems)指向一个或多个操作(xhtml 页面)。

到目前为止一切顺利,用户登录,菜单是动态的,正在生成链接,单击后他/她可以导航到他/她应该执行的任何操作。

我的问题是我无法决定一种优雅的方式来限制对这些页面的绝对 URL 的访问。如果 user1 被“授权”执行操作 1 但没有执行操作 2 或操作 3,目前我找不到检查他的 session 状态并应用通用规则(导航规则?)的最优雅的方法,如果实际的 Web 用户在 url 上写入bar 操作的绝对路径。

'/secured/operation1/op2.xhtml'

实现这种要求的最兼容 JSF2 的方法是什么?

我已经在每个单独的 opxx.xhtml 页面上尝试了 preRenderView,不幸的是它不起作用+我不喜欢在每个操作上重复它

非常感谢您的提示。

最佳答案

Web 应用程序中的安全性是一个更高级的主题。基本上你有两种方法:

  • 基于容器:这意味着您的 Servlet 容器(例如 Tomcat)可以为您完成这项工作(推荐)
  • 基于应用程序:您必须自己完成工作

详细解释了如何设置基于容器的安全性here 。总而言之,您必须实现一个简单的表单(不是 JSF 表单!),其中包含特定的操作以及用户名和密码字段的特定 id。然后,您可以使用 web.xml 文件轻松限制对特定 URL 模式的访问。在 web.xml 文件中,您可以限制某些用户角色对某些 URL 模式的访问。从用户名到用户角色的映射是由安全领域完成的。描述了如何设置安全领域对于 Tomcat here .

如果您想自己实现安全性,则必须实现一个 ServletFilter 来检查所有请求的 URL,并转发未登录到您的登录表单的用户,或者在用户获得授权的情况下传递请求。如果用户无权查看该页面,您必须将用户转发到您的错误页面。由于 CDI 注入(inject)不适用于 ServletFilter,因此您必须从 HttpSession 中查找存储用户信息(登录、权限)的 bean。

关于java - JSF2 - 限制某些 xhtml 页面访问的灵活方式,在访问上应用简单的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497396/

相关文章:

jsf - 单击链接时不要重新加载页面

jsf - 使用 JSF 时 PrimeFaces taglib 的问题

java - 在 primeFaces 中禁用 rowEditor 的铅笔

java - JSF 欢迎文件未正确重定向

jsf - JSF:检查=“id”/> <h:message是否存在的更好方法

java - 在 TableLayout 中以编程方式设置 ImageView 的宽度和高度

java - NullPointerException:在不期望的地方抛出

java - 从文件加载公钥数据

java - Intent 问题: how to use MainActivity from another class "Adapter" to pass data to SecondActivity

java - JSF 1.2 托管 Bean 中 @PersistenceContext 的含义