java – Glassfish 3.1默认主体到角色映射

我正在使用glassfish和jaas模块。

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

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ALL Page for admin</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>
<security-role>
    <description>Administrator</description>
    <role-name>user</role-name>
</security-role>

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

然后在glassfish控制台上,我需要勾选:
配置 – > server-config – >安全性 – >默认主体到角色映射

我的问题是为什么我需要勾选这个默认校长到角色映射?我如何更改我的web.xml以避免勾选?

非常感谢

卢瓦克

当您在web.xml中指定角色和角色时,您正在使用声明式安全性,这基本上依赖于使用JAAS来强制执行声明性地指定的身份验证和授权要求。

部署描述符中指定的角色仅仅是应用程序中使用的角色的表示。这些角色不一定与在运行时使用的用户身份数据库(或认证领域)中存在的角色相同,通常这些角色可能不同,因为应用程序的开发可能已经在不考虑实际用户的情况下进行,存在于用户身份数据库中的组。

通常,使用容器特定部署描述符,在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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
...
    <security-role-mapping>
        <role-name>user</role-name>
        <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
        <group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
    </security-role-mapping>
...
</glassfish-web-app>

与GlassFish的application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
...
    <security-role-mapping>
        <role-name>user</role-name>
        <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
        <group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
    </security-role-mapping>
...
</glassfish-application>

与GlassFish ejb-jar.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
...
    <security-role-mapping>
        <role-name>user</role-name>
        <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
        <group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
    </security-role-mapping>
...
</glassfish-ejb-jar>

上述描述符将角色用户映射到具有个人身份的“根”的主体,并将域名为Administrators的用户组映射。您可以忽略这些映射之一,并且仅保留主体映射的角色或组映射的角色。您还可以将多个主体映射到相同的角色,或多个组映射到相同的角色,或者甚至多个主体和组映射到相同的角色。

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

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

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

您可以在one of the posts on blogs.oracle.com that describes this feature of Glassfish阅读更多有关此主题的信息。

翻译自:https://stackoverflow.com/questions/6728164/glassfish-3-1-default-principal-to-role-mapping

转载注明原文:java – Glassfish 3.1默认主体到角色映射