# LDAP 命名空间选项

LDAP 实现广泛地使用 Spring LDAP，因此熟悉该项目的 API 可能是有用的。

## 使用以下命令定义 LDAP 服务器

`<ldap-server>`元素此元素设置一个 Spring LDAP`ContextSource`供其他 LDAP bean 使用，定义 LDAP 服务器的位置和用于连接它的其他信息（例如用户名和密码，如果它不允许匿名访问的话）。它还可以用于创建用于测试的嵌入式服务器。这两个选项的语法细节在[LDAP 章节](../../authentication/passwords/ldap.html#servlet-authentication-ldap)中都有涉及。实际的`ContextSource`实现是`DefaultSpringSecurityContextSource`，它扩展了 Spring LDAP 的`LdapContextSource`类。`manager-dn`和`manager-password`属性分别映射到后者的`userDn`和`password`属性。

如果在应用程序上下文中只定义了一个服务器，那么其他 LDAP 命名空间定义的 bean 将自动使用它。否则，你可以给元素一个“id”属性，并使用`server-ref`属性从其他名称空间 bean 引用它。这实际上是`id`实例的 Bean `id`，如果你想在其他传统的 Spring bean 中使用它的话。

### \<ldap-server\>属性

* **模式**显式指定应该使用哪个嵌入式 LDAP 服务器。值为`apacheds`和`unboundid`。默认情况下，这将取决于 Classpath 中的库是否可用。

* **身份证**一个 Bean 标识符，用于在上下文的其他地方引用 Bean。

* **LDIF**显式指定要加载到嵌入式 LDAP 服务器中的 LDIF 文件资源。LDIF 应该是一个 Spring 资源模式（即 Classpath:init.ldif）。默认值是 Classpath \*:\*.ldif

* **Manager-dn**将用于对（非嵌入式）LDAP 服务器进行身份验证的“Manager”用户标识的用户名。如果省略，将使用匿名访问。

* **管理器-密码**Manager DN 的密码。如果指定了 Manager-DN，这是必需的。

* **港口**指定 IP 端口号。例如，用于配置嵌入式 LDAP 服务器。默认值是 33389。

* **根**嵌入式 LDAP 服务器的可选根后缀。默认为“dc=springframework，dc=org”

* **网址**指定不使用嵌入式 LDAP 服务器时的 LDAP 服务器 URL。

## \<ldap-authentication-provider\>

这个元素是创建`LdapAuthenticationProvider`实例的简写。默认情况下，这将被配置为`BindAuthenticator`实例和`DefaultAuthoritiesPopulator`实例。与所有名称空间身份验证提供者一样，它必须作为`authentication-provider`元素的子元素包含。

### \<ldap-authentication-provider\>的父元素

* [身份验证管理器](authentication-manager.html#nsa-authentication-manager)

### \<ldap-authentication-provider\>属性

* **组-角色-属性**包含将在 Spring Security 中使用的角色名的 LDAP 属性名。映射到`DefaultLdapAuthoritiesPopulator`的`groupRoleAttribute`属性。默认为“cn”。

* **群组搜索基础**搜索组成员搜索的基础。映射到`DefaultLdapAuthoritiesPopulator`的`groupSearchBase`构造函数参数。默认值为“”（从根搜索）。

* **组搜索过滤器**组搜索过滤器。映射到`DefaultLdapAuthoritiesPopulator`的`groupSearchFilter`属性。默认值为`(uniqueMember={0})`。替换的参数是用户的 DN。

* **角色前缀**一个非空的字符串前缀，它将被添加到从 Persistent 加载的角色字符串中。映射到`DefaultLdapAuthoritiesPopulator`的`rolePrefix`属性。默认值为“role\_”。在默认值为非空的情况下，使用值“none”表示无前缀。

* **服务器-ref**可选使用的服务器。如果省略，并且注册了一个默认的 LDAP 服务器（使用没有 ID 的 \<ldap-server\>），则将使用该服务器。

* **user-context-mapper-ref**通过指定一个 UserDetailsContextMapper Bean，允许对加载的用户对象进行显式定制，该用户对象将根据用户目录条目中的上下文信息被调用

* **用户-详细信息-类**允许指定用户条目的 ObjectClass。如果设置了，框架将尝试将定义的类的标准属性加载到返回的 UserDetails 对象中

* **user-dn-pattern**如果你的用户在目录中的固定位置（即你可以直接从用户名计算出 DN，而无需进行目录搜索），则可以使用此属性直接映射到 DN。它直接映射到`userDnPatterns`的`AbstractLdapAuthenticator`属性。该值是用于构建用户 DN 的特定模式，例如`uid={0},ou=people`。键`{0}`必须存在，并将被用户名代替。

* **用户搜索基础**用户搜索的搜索基础。默认值为“”。仅与“用户搜索过滤器”一起使用。

  如果需要执行搜索以在目录中定位用户，则可以设置这些属性来控制搜索。`BindAuthenticator`将被配置为`FilterBasedLdapUserSearch`，并且属性值直接映射到该 Bean 构造函数的前两个参数。如果这些属性 AREN 没有设置，并且没有提供`user-dn-pattern`作为替代，那么将使用`user-search-filter="(uid={0})"`和`user-search-base=""`的默认搜索值。

* **用户搜索过滤器**用于搜索用户的 LDAP 过滤器（可选）。例如`(uid={0})`。替换的参数是用户的登录名。

  如果需要执行搜索以在目录中定位用户，则可以设置这些属性来控制搜索。`BindAuthenticator`将被配置为`FilterBasedLdapUserSearch`，并且属性值直接映射到该 Bean 构造函数的前两个参数。如果没有设置这些属性 AREN，并且没有提供`user-dn-pattern`作为替代选项，那么将使用`user-search-filter="(uid={0})"`和`user-search-base=""`的默认搜索值。

### \<ldap-authentication-provider\>的子元素

* [密码-比较](#nsa-password-compare)

## \<password-compare\>

这被用作`<ldap-provider>`的子元素，并将身份验证策略从`BindAuthenticator`切换到`PasswordComparisonAuthenticator`。

### \<password-compare\>的父元素

* [LDAP-身份验证-提供者](#nsa-ldap-authentication-provider)

### \<password-compare\>属性

* **散列**定义了用于用户密码的散列算法。我们强烈建议不要使用 MD4，因为它是一种非常弱的散列算法。

* **密码属性**目录中包含用户密码的属性。默认值为“userpassword”。

### \<password-compare\>的子元素

* [密码编码器](authentication-manager.html#nsa-password-encoder)

## \<ldap-user-service\>

这个元素配置一个 LDAP`UserDetailsService`。所使用的类是`LdapUserDetailsService`，它是`FilterBasedLdapUserSearch`和`DefaultLdapAuthoritiesPopulator`的组合。它支持的属性具有与`<ldap-provider>`中相同的用法。

### \<ldap-user-service\>属性

* **cache-ref**定义了对缓存的引用，以便与 UserDetailsService 一起使用。

* **组-角色-属性**包含将在 Spring Security 中使用的角色名的 LDAP 属性名。默认为“cn”。

* **群组搜索基础**搜索组成员搜索的基础。默认值为“”（从根搜索）。

* **组搜索过滤器**组搜索过滤器。默认值为`(uniqueMember={0})`。替换的参数是用户的 DN。

* **身份证** Bean 标识符，用于在上下文的其他地方引用 Bean。

* **角色前缀**一个非空的字符串前缀，它将被添加到从持久存储中加载的角色字符串中（例如“role\_”）。在默认值为非空的情况下，使用值“none”表示无前缀。

* **服务器-ref**可选使用的服务器。如果省略，并且注册了一个缺省的 LDAP 服务器（使用没有 ID 的 \<ldap-server\>），则将使用该服务器。

* **user-context-mapper-ref**通过指定一个 UserDetailsContextMapper Bean，允许对加载的用户对象进行显式定制，该用户对象将根据用户目录条目中的上下文信息被调用

* **用户-详细信息-类**允许指定用户条目的 ObjectClass。如果设置了，框架将尝试将已定义类的标准属性加载到返回的 UserDetails 对象中

* **用户搜索基础**用户搜索的搜索基础。默认值为“”。仅与“用户搜索过滤器”一起使用。

* **用户搜索过滤器**用于搜索用户的 LDAP 过滤器（可选）。例如`(uid={0})`。替换的参数是用户的登录名。

[方法安全性](method-security.html)[WebSocket Security](websocket.html)

