为什么我在jdbcRealm数据库中列出web.xml中的安全角色?

kar*_*kpl 7 java security-roles jaas java-ee

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

 username | role
----------+-------
 john     | admin
 mary     | user
Run Code Online (Sandbox Code Playgroud)

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

<security-role>
  <role-name>admin</role-name>
</security-role>
<security-role>
  <role-name>user</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)

没有它isUserInRole()总是返回false.

Jac*_*ski 7

您没有重新定义安全角色web.xml.您列出它们,以便应用程序服务器知道它们在您的代码中的使用.

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

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

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

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

  • 在我简单的“ hello-world”式应用程序中;我没有指定&lt;security-role&gt;标记。一切仍然按预期进行。即浏览器要求认证。并由tomcat正确识别输入的用户及其角色。因此,它仅仅是功能强大的功能吗? (2认同)