0

嗨,我实际上是想就一个非常具体的问题获得提示或想法。技术上下文是带有 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

如果未设置“用户”bean(实际上是会话范围的bean) ,我有一个@WebFilter限制访问。/secured/*

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

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

我的问题是我无法决定限制对这些页面的绝对 url 访问的优雅方式。如果 user1 被“授权”执行 operation1 而不是 operation2 或 operation3,目前我找不到检查他的会话状态和应用通用规则(导航规则?)的最优雅的方法,如果实际的 web 用户写在 url bar 操作的绝对路径。

'/secured/operation1/op2.xhtml'

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

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

非常感谢您的提示。

4

1 回答 1

2

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

  • 基于容器:这意味着像 Tomcat 这样的 servlet 容器会为您完成工作(推荐)
  • 基于应用程序:您必须自己完成工作

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

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

于 2013-10-21T18:06:35.787 回答