我在Glassfish 3上运行JavaEE 6 web应用程序。我使用带有jdbcRealm和默认主体到角色映射的JAAS。在我的数据库中,我有一个表,用于将用户名映射到他们的角色:
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,而数据库又映射到用户a和b。
话虽如此,jdbcRealm使用的数据库具有完全相同的角色,因为它们是应用程序服务器需要映射到应用程序中的角色的用户的键。
您在代码和部署描述符中使用的是一组用户的逻辑名称,这些用户通过jdbcRealm提供的映射解析为实际用户。