当前位置: 首页 > 面试题库 >

Glassfish 3.1默认主体到角色映射

敖硕
2023-03-14
问题内容

我正在使用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控制台上,我需要在以下选项中打勾:配置->服务器配置->安全性->默认主体到角色映射

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

非常感谢

洛伊奇


问题答案:

当您指定角色和角色时,web.xml您将使用声明式安全性,它实质上依赖于使用JAAS来强制执行声明性指定的身份验证和授权要求。

部署描述符中指定的角色仅表示应用程序中使用的角色。这些角色不必与运行时使用的用户身份数据库(或身份验证领域)中的角色相同,并且通常这些角色可能有所不同,因为可能已经进行了应用程序的开发,而与实际用户无关,用户身份数据库中存在的组。

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

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>

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

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

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

如果希望避免在默认主体到角色映射的部署选项中打勾,则必须像在其他应用程序服务器中一样,在容器特定的部署描述符中自行提供角色到主体/组的映射。

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



 类似资料:
  • 我有一个用KeyCloak保护的spring boot应用程序。领域中的每个用户都有我的资源(客户机)的角色。角色配置在用户选项卡上,对于角色映射选项卡下的特定用户,角色配置为客户端角色: 我还使用了与LDAP Active Directory的集成,所有用户都来自LDAP Active Directory。现在,如果我想为Active Directory(AD)组添加特定的角色,我必须进入Act

  • 上一节我们设置了默认地图和关卡,这一节我们来设置默认的角色和控制器和默认地图不一样,默认角色和控制器需要设置在 GameMode 里面。 1) 打开 VS 编辑器, 打开“APlayingGameModeBase.h”文件,声明一个构造函数: 2) 在“APlayingGameModeBase.cpp”文件中创建构造函数实现,然后在 #include "PlayingGameModeBase.h"

  • 我们公司的用户存储在ldap(oracle internet目录)中。用户有特定的组,例如管理员、用户等。我需要将这些组映射到我的客户端应用程序角色。客户机应用程序是带有keycloak-spring-security-adapter(pom)的测试Spring Boot应用程序。 我在Keycloak管理控制台中执行的步骤: 在Users Federation菜单中使用ldap创建用户Feder

  • 当使用 VSCode Jupyter Notebook 使用 绘制图形时,即使 VSCode 主题为深色,图形也会以浅色主题呈现。据我了解,这个问题已经解决了,当 VSCode 主题默认为深色时,VSCode 应该默认 数字。 我做错了什么? 我对整个数据科学和机器学习领域还很陌生,到目前为止,我一直在使用Jupyter笔记本(有时还有Jupyter实验室)来满足我的所有编码需求。然而,Jupyt

  • 我在一个项目中使用Spring Boot和Data REST,我想禁用以下默认映射来调试映射问题: 我发现这个问题禁用了,这会导致这些映射不被映射。但是,我的控制器映射也不会被映射。 我可以在保留我定义的映射时禁用这些映射吗? 提前谢谢。

  • 我使用此链接中的以下代码为我的一个数据模型类(JSON到JAXB模型的转换)添加自定义反序列化程序。 我想使用com。fasterxml。杰克逊。jaxrs。json。JacksonJaxbJsonProvider,用于其他数据模型的JSON序列化/反序列化。 JacksonJaxbJsonProvider的默认实现非常适合我的JAXB模型,将超类作为抽象类。但是,一旦我提供了自己的自定义Obje