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

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

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

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

  admin   user  

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

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

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

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

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

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