当您指定角色和角色时,
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功能的文章中阅读有关此主题的更多信息。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)