7

我在 Glassfish 3 上运行 JavaEE 6 Web 应用程序。我将 JAAS 与 jdbcRealm 和默认主体到角色映射一起使用。在我的数据库中,我有用于将用户名映射到其角色的表:

 username | role
----------+-------
 john     | admin
 mary     | user

为什么我需要在我的 ? 中再次列出这些角色web.xml

<security-role>
  <role-name>admin</role-name>
</security-role>
<security-role>
  <role-name>user</role-name>
</security-role>

没有那个isUserInRole()总是返回false

4

1 回答 1

8

您不会在web.xml. 您列出它们,以便应用程序服务器知道它们在您的代码中的用途。

当您部署安全应用程序时,应用程序服务器会读取部署描述符以获取有关安全配置的信息。它知道您的应用程序中使用的角色。然后应用程序可以使用角色并期望应用程序服务器能够将它们映射到用户和组(最终再次解析给用户,因为用户是最安全的构建块)。

说到将角色映射到用户,这就是领域的用武之地。它提供了映射,因此您知道部署描述符中的角色 X 映射到数据库中的角色 X,而数据库中的角色 X 又映射到用户 A 和 B。

话虽如此,jdbcRealm 使用的数据库具有完全相同的角色,因为它们是应用程序服务器需要映射到应用程序角色的用户的键。

What you use in your code and a deployment descriptor is a logical name of a group of users that are resolved to real users via the mapping that's offered by the jdbcRealm.

于 2013-03-06T04:38:44.983 回答