Glassfish 3.1默认主体到角色映射

我正在使用glassfish和jaas模块。

我以这种方式配置了我的web.xml。

  ALL Page for admin /*   user    BASIC file   Administrator user  

这意味着所有想要访问我的Web应用程序的用户都需要是组用户。

然后在glassfish控制台上我需要勾选选项:Configuration – > server-config – > security – > Default Principal To Role Mapping

我的问题是为什么我需要将此默认主体勾选到角色映射? 以及如何更改我的web.xml以避免勾选它?

非常感谢

卢瓦克

web.xml指定角色和角色时,您使用的是声明性安全性,它基本上依赖于使用JAAS来强制执行以声明方式指定的身份validation和授权要求。

部署描述符中指定的角色仅仅是应用程序中使用的角色的表示。 这些角色不必与运行时使用的用户身份数据库(或身份validation领域)中存在的角色相同,并且通常这些角色可能不同,因为应用程序的开发可能在不考虑实际用户和用户身份数据库中存在的组。

通常,使用特定于容器的部署描述符在web.xml指定的声明性角色与用户身份数据库中存在的主体或组之间执行映射。 在Glassfish 3,1中,这恰好是glassfish-web.xml文件。 每个这样的映射都会将应用程序中的声明性角色映射到JAAS域中的主体或组,以下列方式在glassfish-web.xml (用于WAR文件部署)或glassfish-application.xml (用于EAR)中文件部署)或glassfish-ejb-jar.xml (用于EJB JAR文件部署):

与GlassFish的web.xml

    ...  user Root  Administrators   ...  

与GlassFish的application.xml

    ...  user Root  Administrators   ...  

与GlassFish ejb-jar.xml中

    ...  user Root  Administrators   ...  

上述描述符将角色user映射到具有名称Root个人标识的Principal以及该领域中具有名称Administrators的用户组。 您可以省略这些映射中的任何一个,并仅保留角色映射角色或角色到组映射。 您可能还有多个主体映射到同一角色,或映射到同一角色的多个组,甚至映射到同一角色的多个主体和组。

理解JAAS域中的主体和组的概念很重要 – 主体表示系统中主体(登录到应用程序的用户)的身份,它可以是单个身份(单个用户)或组身份(用户组)。 通过将声明性角色映射到实际的主体或组,可以对任何用户身份数据库(即任何领域)强制执行web.xml中指定的规则,并且能够动态地执行此操作而无需对代码库进行任何更改; 毕竟,这样的改变需要在一个可能不同的领域中将声明性角色重新映射到新的主体和组。 您可以在Java EE 6教程的安全性章节中找到有关Java EE安全性和JAAS如何协同工作的基本教程 。

Glassfish允许简化映射方案,只要声明性角色的名称恰好发生,就不必在特定于容器的部署描述符(在本例中为glassfish-web.xml)中执行所有声明性角色的映射。类似于主体或组的名称。 这是角色映射方案的默认主体。 在您的情况下,您的领域中的主体/组似乎与web.xml指定的声明性角色相同,因此您可以避免显式地将角色映射到主体和组。 简单来说,如果角色user与JAAS领域中的主要user或用户组user相同(并且类似于其他身份),那么您可以使用Glassfish的默认角色到主映射方案,而不是为每个映射都映射您的web.xml文件中的角色。

如果您希望避免勾选默认主体到角色映射的部署选项,那么您必须在容器特定部署描述符中为主体/组映射提供角色,就像通常对其他应用程序服务器所做的那样。

您可以在blogs.oracle.com上的一篇描述Glassfish此function的post中阅读有关此主题的更多信息。