12.3. 所包括的安全映射模块

JBoss EAP 6 提供了下面的安全映射角色。
代码
PropertiesRoles org.jboss.security.mapping.providers.role.PropertiesRolesMappingProvider
SimpleRoles org.jboss.security.mapping.providers.role.SimpleRolesMappingProvider
DeploymentRoles org.jboss.security.mapping.providers.DeploymentRolesMappingProvider
DatabaseRoles org.jboss.security.mapping.providers.role.DatabaseRolesMappingProvider
LdapRoles org.jboss.security.mapping.providers.role.LdapRolesMappingProvider
LdapAttributes org.jboss.security.mapping.providers.attribute.LdapAttributeMappingProvider
DeploymentRolesMappingProvider

负责可以在 jboss-web.xmljboss-app.xml 部署描述符文件里完成的主体到角色映射的角色映射模块。

例 12.1. 示例

<jboss-web>
...
  <security-role>
      <role-name>Support</role-name>
      <principal-name>Mark</principal-name> 
      <principal-name>Tom</principal-name>
  </security-role>
...
</jboss-web>

org.jboss.security.mapping.providers.DeploymentRoleToRolesMappingProvider

负责可以在 jboss-web.xmljboss-app.xml 部署描述符文件里完成的主体到角色映射的角色到角色映射模块(Role to Roles Mapping Module)。在这个例子里,principal-name 表示映射其他角色的角色。

例 12.2. 示例

  <jboss-web>
 ...
    <security-role>
      <role-name>Employee</role-name>
      <principal-name>Support</principal-name>
      <principal-name>Sales</principal-name>
    </security-role>
 ...
  </jboss-web>

表示具有 Support 或 Sales 角色的个主体也会分配 Employee 角色。
org.jboss.security.mapping.providers.OptionsRoleMappingProvider

从选项里提取角色并附加到传入的组里的 Role Mapping 提供者。它使用角色名称(键)的属性风格映射和用逗号隔开的角色列表(值)。

org.jboss.security.mapping.providers.principal.SimplePrincipalMappingProvider

使用 SimplePrincipal 并转成具有不同主体名称的 SimplePrincipal 的主体映射提供者。

DatabaseRolesMappingProvider

从数据库读取角色的 MappingProvider。

选项:
  • dsJndiName:用来将角色映射至用户的数据源的 JNDI 名称。
  • rolesQuery:这个选项应该是等同于 "select RoleName from Roles where User=?" 的 prepared 语句,? 应用当前的主体名称替换。
  • suspendResume:布尔值 - 在执行角色搜索时暂停且在之后恢复和当前线程关联的事务。
  • transactionManagerJndiName:事务管理者的 JNDI 名称(默认为 java:/TransactionManager)
LdapRolesMappingProvider

为使用 LDAP 服务器搜索角色的用户分配角色的映射提供者。

选项:
  • bindDN:用户和角色查询里用来绑定 LDAP 服务器的 DN。这个 DN 需要读取和搜索 baseCtxDN 和 rolesCtxDN 值上的权限。
  • bindCredential:bindDN 的密码。如果指定了 jaasSecurityDomain,它可以被加密。
  • rolesCtxDN:用于搜索用户角色的上下文的固定 DN。这不是实际角色的 DN,它是包含用户角色的对象所在的 DN。例如,在 Microsoft Active Directory 服务器里,它是用户帐号所在的 DN。
  • roleAttributeID:包含授权角色的名称的 LDAP 属性。
  • roleAttributeIsDNroleAttributeID 是否包含角色对象的全限定 DN。如果为 false,角色名将从上下文名称的 roleNameAttributeId 属性值里获取。某些目录模式,如 Microsoft Active Directory,要求这个属性的值为 true
  • roleNameAttributeID:包含角色名称的 roleCtxDN 上下文里的属性的名称。如果 roleAttributeIsDN 属性为 true,这个属性将被用来查找角色对象的 name 属性。
  • parseRoleNameFromDN:指定查询返回的 DN 是否包含 roleNameAttributeID。如果设置为 true,将检查 DN 里是否有 roleNameATtributeID,如果为 false,将不会检查。这个标记可以提高 LDAP 查询的性能。
  • roleFilter:用来定位和验证用户相关联的角色的搜索过滤器。从登录模块回调方法里获得的输入用户名或 userDN 将被替换过滤器里的 {0} 表达式。已验证的 userDN 将替换过滤器里的 {1} 表达式。匹配输入用户名的搜索过滤器示例是 (member={0})。对应已验证的用户 DN 的例子是 userDN is (member={1})
  • roleRecursion:对匹配内容进行角色搜索的递归层数。0 表示禁用递归。
  • searchTimeLimit:用户/角色搜索的超时时间(毫秒)。默认为 10000(10 秒)。
  • searchScope:所使用的搜索作用域。
PropertiesRolesMappingProvider

以下列格式从属性文件读取角色的 MappingProvider:username=role1,role2,...

选项:
  • rolesProperties:属性格式文件的名称。JBoss 变量的扩展可以使用格式 ${jboss.variable}
SimpleRolesMappingProvider

从选项表里读取角色的简单 MappingProvider。Option 属性名称是分配角色的主体名称,属性值是分配给主体的用逗号隔开的角色名称。

例 12.3. 示例

<module-option name="JavaDuke" value="JBossAdmin,Admin"/> 
<module-option name="joe" value="Users"/>

org.jboss.security.mapping.providers.attribute.DefaultAttributeMappingProvider

检查模块并在映射上下文里定位主体名称以根据模块选项的 principalName + ".email" 创建属性电子邮件,并将其映射至给定的主体。

LdapAttributeMappingProvider

将属性从 LDAP 映射至主题。它的选项包括 LDAP JNDI 供应商支持的任何选项。

例 12.4. 标准属性的名称示例包括:

Context.INITIAL_CONTEXT_FACTORY = "java.naming.factory.initial"
Context.SECURITY_PROTOCOL = "java.naming.security.protocol"
Context.PROVIDER_URL = "java.naming.provider.url"
Context.SECURITY_AUTHENTICATION = "java.naming.security.authentication"

选项:
  • bindDN:用户和角色查询里用来绑定 LDAP 服务器的 DN。这个 DN 需要读取和搜索 baseCtxDN 和 rolesCtxDN 值上的权限。
  • bindCredential:bindDN 的密码。如果指定了 jaasSecurityDomain,它可以被加密。
  • baseCtxDN:开始用户搜索所使用的上下文的固定标识名。
  • baseFilter:用来定位要验证的用户的上下文的搜索过滤器。从登录模块回调方法里获得的输入用户名或 userDN 将替换至过滤器里的 {0} 表达式。这种替换行为来自标准的 __DirContext.search(Name, String, Object[], SearchControls cons)__ 方法。搜索过滤器的一个常见例子是 (uid={0})
  • searchTimeLimit:用户/角色搜索的超时时间(毫秒)。默认为 10000(10 秒)。
  • attributeList:用逗号隔开的属性列表。例如,mail、cn、sn、employeeType、employeeNumber。
  • jaasSecurityDomain:用于解密 java.naming.security.principal 的 JaasSecurityDomain。JaasSecurityDomain#encrypt64(byte[]) 方法返回密码的解密形式。org.jboss.security.plugins.PBEUtils也可以用来生成解密形式。