0

我正在做一个资产管理系统。系统中有管理员、子管理员和受限用户三类用户。管理员可以做任何事情,子管理员只用于验证数据,受限用户只能看到刚刚完成的数据/ 查看数据

在数据库中,访问权限的特征是 number.Administrator = 0,SubAdmin = 1,以及受限用户 = 2。

要进入系统,每个用户都必须登录,在登录时,访问权限保存到会话中。问题,如何检查 servlet 文件 (.xhtml) 中的会话?例如DataTable中有数据。有菜单“编辑”、“删除”和“验证”。如果管理员登录,则菜单“编辑,删除”将出现在表格行中,如果SubAdmin登录,则只出现菜单“验证”,如果受限用户登录,则菜单不出现。

我应该在文件中检查 servletnya 会话,还是有其他方法?如何 ?

非常感谢..

4

2 回答 2

1

首先,XHTML 文件不是Servlet文件。这是一个Facelets文件。Facelets 是一种基于 XML 的视图技术。

至于您的具体问题,只需在 JSF 组件的rendered属性中确定即可。如果布尔条件为false,则 JSF 根本不会渲染组件(并且在提交时也不会处理它,因此您也可以安全地防止被篡改的请求)。

假设登录用户是UserEL 范围内可用的 javabean as #{user},并且有一个hasRole()采用 aString并返回 a的方法boolean,那么您可以这样做:

<h:commandButton value="delete" rendered="#{user.hasRole('admin')}" />

有一些变化,比如只有一个isAdmin()方法返回boolean

<h:commandButton value="delete" rendered="#{user.admin}" />

或者有一个getRoles()返回 a 的方法Collection

<h:commandButton value="delete" rendered="#{user.roles.contains('admin')}" />

如有必要,您也可以使用 integer0而不是 string admin,但这样的自我记录较少。

也可以看看:


但是请注意,您基本上是家庭种植授权。您还可以考虑使用 Java EE 内置容器管理的身份验证和授权。然后,您可以使用HttpServletRequest#isUserInRole()来授权用户。这很像User#hasRole()建议:

<h:commandButton value="delete" rendered="#{request.isUserInRole('admin')}" />
于 2012-05-01T20:04:56.443 回答
0

在 Web 应用程序中使用Spring Security时,借助特殊标签可以轻松解决您的问题:

<sec:authorize ifAllGranted="ADMINISTRATOR">
    <h:commandButton value="edit" />
    <h:commandButton value="delete" />
</sec:authorize>
<sec:authorize ifNotGranted="SUBADMIN">
    <h:commandButton value="verify" />
</sec:authorize>

为此,只需在页面的命名空间中添加:

xmlns:sec="http://www.springframework.org/security/tags"

并将这个连接到您的项目。

您还可以了解您可以使用的 Spring Security 的其他有用的好处

于 2012-05-01T20:25:23.720 回答