38.2. 内置安全提供程序

Apusic 应用服务器内置了三种安全提供程序实现,包含文件、JDBC以及LDAP存储,以方便用户根据自身业务进行选择。要使用这些安全提供 程序,首先需要配置%DOMAIN_HOME%/config/security.xml,如何配置以下将逐个介绍。

38.2.1. 文件存储配置

<realm>
    <realm-name>default</realm-name>
    <provider-type>FileStore</provider-type>
</realm>

38.2.2. JDBC存储配置

JDBC配置属性说明:

  • datasource-jndi-name: 连接用户与组信息所在数据库的数据源的JNDI名

  • user-table-name: 用户信息表名

  • usernameField: 用户字段名

  • passwordField: 密码字段名

  • needEncode: 指定密码是否需要编码

  • encoder-class-name: 用于对密码进行编码的全类名,该类必须实现接口: com.apusic.security.realm.Encoder

  • query-by-groupname-sql: 根据组名查询其包含用户的SQL语句

示例配置:

<realm> 
    <realm-name>default</realm-name>
    <provider-type>RDBMS</provider-type>
    <attribute name="datasource-jndi-name" value="jdbc/mssqlserver" />
    <attribute name="usernameField" value="uname" />
    <attribute name="passwordField" value="pwd" />
    <attribute name="user-table-name" value="userbase" />
    <attribute name="query-by-groupname-sql" value="select uname from groupbase where gname=?" />
</realm>

38.2.3. LDAP存储配置

LDAP配置属性说明:

  • host: LDAP服务器所在主机名或IP

  • port: LDAP服务器监听的端口号

  • rootDN: 登录LDAP服务器的根DN

  • password: 登录LDAP服务器的根DN对应的密码

  • searchBaseDN: 搜索用户的基DN

  • groupBaseDN: 搜索组的基DN

  • userField: 用户字段名

  • passwordField: 密码字段名

  • memberField: 组项中定义一个用户成员的字段名,此字段值对应用户的DN

    注: 组字段固定名称为cn

假设有一个LDAP服务器,其中定义了一个名为 manager的组,该组包含用户andy及jacky。

dn: cn=manager,ou=groups,dc=example,dc=com
objectClass: groupOfNames
objectClass: top
cn: manager
member: uid=andy,ou=DeptA,dc=example,dc=com
member: uid=jacky,ou=DeptA,dc=example,dc=com

配置:

<realm>
    <realm-name>ldap</realm-name>
    <provider-type>ldap</provider-type>
    <attribute name="host" value="localhost" />
    <attribute name="port" value="10389" />
    <attribute name="rootDN" value="uid=admin,ou=system" />
    <attribute name="password" value="secret" />
    <attribute name="searchBaseDN"  value="ou=DeptA,dc=example,dc=com" />
    <attribute name="userField" value="uid" />
    <attribute name="passwordField" value="userpassword" />
    <attribute name="groupBaseDN" value="ou=groups,dc=example,dc=com" />
    <attribute name="memberField" value="member" />
</realm>