嗨,我实际上正在尝试获取有关一个非常具体的问题的提示或想法。技术背景是 使用 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/