Java 为什么我要在web.xml中列出安全角色,而它们';您在jdbcRealm数据库中吗?

Java 为什么我要在web.xml中列出安全角色,而它们';您在jdbcRealm数据库中吗?,java,jakarta-ee,jaas,security-roles,Java,Jakarta Ee,Jaas,Security Roles,我在GlassFish3上运行JavaEE6Web应用程序。我将JAAS与jdbcRealm和默认主体到角色映射一起使用。在我的数据库中,我有一个用于将用户名映射到其角色的表: username | role ----------+------- john | admin mary | user 为什么我需要在我的web.xml中再次列出这些角色 <security-role> <role-name>admin</role-name>

我在GlassFish3上运行JavaEE6Web应用程序。我将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

您就不能在
web.xml
中重新定义安全角色。列出它们,以便应用程序服务器了解它们在代码中的使用

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

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

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


您在代码和部署描述符中使用的是一组用户的逻辑名称,这些用户通过jdbcRealm提供的映射解析为真实用户。

看起来很接近,但实际上并不是,尽管它们涉及安全领域;我没有指定标签。尽管如此,一切都按预期进行。i、 e.浏览器要求验证。和输入的用户,其角色由tomcat正确识别。那么,拥有这个功能是不是很好呢?