在 Java CAPS 中使用 LDAP

配置系统信息库

要将 LDAP 服务器用于系统信息库用户管理,必须将 <Realm> 元素添加到系统信息库的 server.xml 文件中,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。

server.xml 文件包含用于指定用户数据库的平面文件实现的默认 <Realm> 元素。平面文件实现将使用 tomcat-users.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/data/files 目录中。

下表介绍了 LDAP 版本的 <Realm> 元素所使用的属性。有关所有可能属性的详细介绍,请参见 org.apache.catalina.realm.JNDIRealm 类的 Tomcat 文档。

属性 

描述 

className 

始终使用以下值:org.apache.catalina.realm.JNDIRealm

connectionURL 

标识 LDAP 服务器的位置。包括 LDAP 服务器名称和 LDAP 服务器侦听请求的端口。 

roleBase 

角色搜索的基条目。如果未指定此属性,则搜索基为顶级目录上下文。 

roleName 

包含角色名称的角色条目中的属性。 

roleSearch 

用于选择角色条目的 LDAP 搜索过滤器。可以包含模式替换 {0}(对于标识名)和/或 {1}(对于已验证用户的用户名)。对于已验证用户(如 Administrator),在某些情况下应选择 {0} 选项。

roleSubtree 

默认情况下,将仅在根条目的下一级搜索 LDAP 目录的角色部分。要启用对整个子树的搜索,请将该值设置为 true

userBase 

包含用户的子树的基条目。如果未指定此属性,则搜索基为顶级上下文。 

userPattern 

用户目录条目的标识名 (Distinguished Name, DN) 的模式,遵循 java.text.MessageFormat 类所支持的语法,使用 {0} 表示应插入实际用户名的位置。

userRoleName 

用户目录条目中的属性名称,包含为此用户分配的角色名称的零个或多个值。此外,可以使用 roleName 属性指定要从通过搜索目录找到的各个角色条目中检索的属性的名称。如果未指定 userRoleName,将从角色搜索中派生用户的所有角色。

userRoleNamePattern 

角色目录条目的标识名 (Distinguished Name, DN) 的模式,遵循 java.text.MessageFormat 类所支持的语法,使用 {0} 表示实际的角色名称。在应插入实际用户名的 Java CAPS 中进行授权时,将使用此模式解析 DN 以获取实际的角色名称。

userSearch 

用于在使用 {0} 替换用户名之后选择用户条目的 LDAP 搜索过滤器。

userSubtree 

默认情况下,将仅在根条目的下一级搜索 LDAP 目录的用户部分。要启用对整个子树的搜索,请将该值设置为 true

Procedure配置系统信息库

  1. 打开 server.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。

  2. 删除或注释掉默认的 <Realm> 元素。

  3. 如果使用的是 Sun Java System Directory Server,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:489"
        userBase="cn=People,dc=sun,dc=com"
        userSearch="(uid={0})"
        userSubtree="true"
        userRoleName="nsroledn"
        userRoleNamePattern="cn={0},dc=sun,dc=com"
        roleSubtree="true"
    />
  4. 如果使用的是 Active Directory,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:389"
        userBase="cn=Users,dc=sun,dc=com"
        userSearch="(cn={0})"
        userSubtree="true"
        roleBase="ou=CAPSRoles,dc=sun,dc=com"
        roleName="cn"
        roleSearch="(member={0})"
        roleSubtree="true"
    />
  5. 如果使用的是 OpenLDAP Directory Server,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。


    <Realm className="org.apache.catalina.realm.JNDIRealm"
        connectionURL="ldap://localhost:389"
        userBase="ou=People,dc=sun,dc=com"
        userSearch="(uid={0})"
        userSubtree="true"
        roleBase="ou=CAPSRoles,dc=sun,dc=com"
        roleName="cn"
        roleSearch="(uniquemember={0})"
        roleSubtree="true"
    />
  6. 如果您的 LDAP 服务器未配置为允许匿名读取访问,请将 connectionName 属性和 connectionPassword 属性添加到 <Realm> 元素中。将第一个属性设置为 Administrator 用户的 DN。将第二个属性设置为用户的加密密码。请参阅以下示例。

    Sun Java System Directory Server:


    connectionName="cn=Directory Manager"
    connectionPassword="E451KDVb0OPcH+GN46OZcg=="

    Active Directory:


    connectionName="Administrator@sun.com"
    connectionPassword="geEiVIbtO+DcH+GN46OZcg=="

    OpenLDAP Directory Server:


    connectionName="cn=Manager,dc=sun,dc=com"
    connectionPassword="l/ZRt1cfNKc="

    要对密码进行加密,请使用 encrypt 实用程序,该程序位于 JavaCAPS-install-dir/repository/repository/util 目录中。该实用程序的文件扩展名取决于您的平台。该实用程序使用未加密的密码作为参数。例如:


    C:\JavaCAPS6\repository\repository\util>encrypt mypwd
    LCUApSkYpuE
  7. 保存并关闭 server.xml 文件。

  8. 启动 LDAP 服务器。

  9. 关闭并重新启动系统信息库。