对于最新稳定版本,请使用 Spring LDAP 4.0.0spring-doc.cadn.net.cn

配置

推荐的配置 Spring LDAP 方式是使用自定义的 XML 配置命名空间。为了提供此功能,您需要在 bean 文件中包含 Spring LDAP 命名空间声明,具体如下:spring-doc.cadn.net.cn

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ldap="http://www.springframework.org/schema/ldap"
       xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/ldap https://www.springframework.org/schema/ldap/spring-ldap.xsd">

上下文来源配置

上下文来源通过使用<ldap:context-source>标记。 最简单的上下文-来源声明要求你指定服务器URL、用户名和密码,具体如下:spring-doc.cadn.net.cn

例子1。最简单的上下文-源声明
<ldap:context-source
    username="cn=Administrator"
    password="secret"
    url="ldap://localhost:389" />

上述例子构成了LdapContextSource使用默认值(见本段后表)以及指定的URL和认证凭证。 上下文源代码上的可配置属性如下(必填属性标注为*):spring-doc.cadn.net.cn

表1。ContextSource 配置属性
属性 默认值 描述

身份证spring-doc.cadn.net.cn

背景来源spring-doc.cadn.net.cn

被创造豆子的ID。spring-doc.cadn.net.cn

用户名spring-doc.cadn.net.cn

在与LDAP服务器认证时使用的用户名(主体)。 这通常是管理员用户的显著名称(例如,cn=管理员但可能因服务器和认证方式而异。 如果认证-来源-参考没有被明确配置。spring-doc.cadn.net.cn

密码spring-doc.cadn.net.cn

与LDAP服务器认证时使用的密码(凭据)。如果认证-来源-参考没有被明确配置。spring-doc.cadn.net.cn

网址 *spring-doc.cadn.net.cn

使用的LDAP服务器的网址。该网址应为以下格式:ldap://myserver.example.com:389. 如需访问 SSL,请使用LDAPS协议和相应端口——例如,ldaps://myserver.example.com:636. 如果你想要故障切换功能,可以指定多个URL,并用逗号分隔(,).spring-doc.cadn.net.cn

基础spring-doc.cadn.net.cn

LdapUtils.emptyLdapName()spring-doc.cadn.net.cn

基础DN。当该属性被配置后,所有从LDAP作中提供和接收的特殊名称都是相对于指定的LDAP路径。 这大大简化了对LDAP树的管理。不过,有几次你需要进入基地路径。 关于此的更多信息,请参见获取基础LDAP路径的引用spring-doc.cadn.net.cn

匿名只读spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

定义了只读作是否通过使用匿名(未认证)上下文执行。 注意将该参数设置为true连同补偿交易支持,支持都不被支持并被拒绝。spring-doc.cadn.net.cn

转 介spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

定义了处理转介的策略,如此处所述。有效数值如下:spring-doc.cadn.net.cn

原生池spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

指定是否应使用原生Java LDAP连接池。可以考虑使用 Spring LDAP 连接池。更多信息请参见“支持池”。spring-doc.cadn.net.cn

认证-来源-参考spring-doc.cadn.net.cn

一个SimpleAuthenticationSource实例。spring-doc.cadn.net.cn

该身份认证源实例用于使用(参见自定义主体和凭证管理)。spring-doc.cadn.net.cn

认证策略参考spring-doc.cadn.net.cn

一个SimpleDirContext认证策略实例。spring-doc.cadn.net.cn

该身份DirContext认证策略实例用于使用(参见习惯DirContext认证处理).spring-doc.cadn.net.cn

base-env-props-refspring-doc.cadn.net.cn

地图应随发送给DirContext关于架构。spring-doc.cadn.net.cn

DirContext认证

什么时候DirContext实例是为在 LDAP 服务器上执行作而创建的,这些上下文通常需要认证。 Spring LDAP提供了多种配置选项。spring-doc.cadn.net.cn

本节涉及在核心功能中验证上下文上下文来源,构造DirContext用于LdapClientLdapTemplate.LDAP通常仅用于用户认证,且上下文来源也可以用来做这个。该过程在使用 Spring LDAP 的用户认证中有所讨论。

默认情况下,认证上下文会为只读和写作创建。你应该具体说明用户名密码用于认证的LDAP用户上下文-来源元素。spring-doc.cadn.net.cn

如果用户名是LDAP用户的区分名称(DN),必须是LDAP树根节点的完整DN,无论是否为基础LDAP路径已在上下文-来源元素。

一些LDAP服务器设置允许匿名只读访问。如果你想用匿名上下文进行只读作,可以设置匿名只读归属为true.spring-doc.cadn.net.cn

习惯DirContext认证处理

Spring LDAP 使用的默认认证机制是简单认证。这意味着主体(由用户名属性)以及凭证(由密码)被设定在哈希表该 被发送到DirContext实现构造器。spring-doc.cadn.net.cn

很多情况下,这种处理并不充分。例如,LDAP服务器通常设置为仅接受安全TLS信道上的通信。可能需要使用特定的LDAP代理认证机制或其他顾虑。spring-doc.cadn.net.cn

您可以通过提供DirContext认证策略实现参考上下文-来源元素。为此,设置认证策略参考属性。spring-doc.cadn.net.cn

TLS

Spring LDAP 为需要 TLS 安全通道通信的 LDAP 服务器提供了两种不同的配置选项:DefaultTlsDirContextAuthenticationStrategy外部TlsDirContextAuthenticationStrategy(外部TlsDirContextAuthenticationStrategy). 两种实现在目标连接上协商一个TLS信道,但在实际认证机制上有所不同。 哪里DefaultTlsDirContextAuthenticationStrategy在安全信道上应用SIMPLE认证(通过使用指定的用户名密码),外部TlsDirContextAuthenticationStrategy(外部TlsDirContextAuthenticationStrategy)使用外部 SASL 认证,应用通过系统属性进行认证配置的客户端证书。spring-doc.cadn.net.cn

由于不同的LDAP服务器实现对显式关闭TLS信道的响应不同(有些服务器要求优雅地关闭连接,而另一些则不支持),TLS的DirContext认证策略实现支持通过使用关闭了优雅地关闭参数。如果该性质被设置为false(默认情况下),不会显式地关闭TLS。如果是trueSpring LDAP 会在关闭目标上下文前优雅地关闭 TLS 通道。spring-doc.cadn.net.cn

在处理TLS连接时,你需要确保原生的LDAP池化功能(如使用以下条件所指定的原生池属性)关闭。这点尤其重要关闭了优雅地关闭设置为false.然而,由于TLS信道协商过程成本较高,使用Spring LDAP池化支持(详见池化支持)可以获得极大的性能提升。

自定义主体与凭证管理

而用于创建的用户名(即用户DN)和密码则经过认证上下文默认是静态定义的(定义在上下文-来源元素配置贯穿整个生命周期上下文来源),但有几种情况下这并非理想的行为。一个常见场景是,执行 LDAP作时应使用当前用户的主体和凭证。你可以通过提供一个引用来修改默认行为认证源实现到......上下文-来源通过使用认证-来源-参考元素,而不是明确指定用户名密码.这认证源被查询的对象是上下文来源每次认证时,主体和凭证上下文是被创造的。spring-doc.cadn.net.cn

如果你使用 Spring Security,可以通过配置你的上下文来源其中有一个实例SpringSecurityAuthenticationSource随Spring Security一起发货。以下示例展示了如何实现:spring-doc.cadn.net.cn

例子2。使用 SpringSecurityAuthenticationSource
<beans>
...
    <ldap:context-source
        url="ldap://localhost:389"
        authentication-source-ref="springSecurityAuthenticationSource"/>

    <bean id="springSecurityAuthenticationSource"
        class="org.springframework.security.ldap.authentication.SpringSecurityAuthenticationSource" />
...
</beans>
我们没有指定任何用户名密码为。我们上下文-来源当使用认证源.这些属性仅在默认行为使用时才需要。
当使用SpringSecurityAuthenticationSource你需要用Spring Security的LdapAuthenticationProvider用于验证用户对LDAP的认证。

原生Java LDAP池

内部的Java LDAP提供商提供了一些非常基础的池化功能。你可以通过使用汇集旗帜开启摘要上下文来源.默认值为false(自1.3版本起)——也就是说,原生的Java LDAP池被关闭。LDAP连接池的配置通过以下方式管理系统属性,所以你需要手动处理,而不是在 Spring Context 配置之外。你可以在这里找到本地池化配置的详细信息。spring-doc.cadn.net.cn

内置的LDAP连接池存在若干严重缺陷,这也是Spring LDAP提供了更复杂的LDAP连接池方法的原因,详见池化支持。如果你需要池化功能,这是推荐的方法。
无论池化配置如何,ContextSource#getContext(String principal, String credentials)方法始终明确不使用原生Java LDAP池,以便重置密码尽快生效。

高深上下文来源配置

本节介绍了更高级的配置方法上下文来源.spring-doc.cadn.net.cn

习惯DirContext环境属性

在某些情况下,你可能想在 ON 上直接配置的那些之外,还要指定额外的环境设置属性上下文-来源.你应该在地图并在base-env-props-ref属性。spring-doc.cadn.net.cn

LdapClient配置

LdapClient是调用LDAP后端的新接口。它在基础上有所改进LdapTemplate具体方式如下:spring-doc.cadn.net.cn

LdapClient目前尚未支持 ODM。 如果你需要这个,LdapTemplate拥有此能力。 双LdapClientLdapTemplate如果需要,可以很好地共存于同一应用中。

LdapClient定义为使用LdapClient#create工厂方法如下:spring-doc.cadn.net.cn

例子3。最简单的 LdapClient 声明
<bean id="ldapClient" class="org.springframework.ldap.core.LdapClient" factory-method="create">
   <constructor-arg ref="contextSource" />
</bean>

该元素引用默认值上下文来源,期望的ID为背景来源(默认情况下上下文-来源元素)。spring-doc.cadn.net.cn

LdapClient实例可以配置如何处理某些已检查的异常以及默认情况搜索控制应用于查询。spring-doc.cadn.net.cn

LdapTemplate配置

LdapTemplate通过使用<ldap:ldap-template>元素。最简单的LDAP-模板声明本身就是该元素:spring-doc.cadn.net.cn

例子4。最简单的LDAP-模板声明
<ldap:ldap-template />

该元素本身会产生LdapTemplate实例中带有默认ID,引用默认ID。上下文来源,期望的ID为背景来源(默认情况下上下文-来源元素)。spring-doc.cadn.net.cn

下表描述了 的可配置属性LDAP-模板:spring-doc.cadn.net.cn

表2。LdapTemplate 配置属性
属性 默认值 描述

身份证spring-doc.cadn.net.cn

ldap模板spring-doc.cadn.net.cn

被创造豆子的ID。spring-doc.cadn.net.cn

上下文-来源-参考spring-doc.cadn.net.cn

背景来源spring-doc.cadn.net.cn

该身份证上下文来源实例。spring-doc.cadn.net.cn

计数限制spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

搜索的默认计数限制。0 表示没有限制。spring-doc.cadn.net.cn

时间限制spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

搜索的默认时间限制是毫秒级。0 表示没有限制。spring-doc.cadn.net.cn

搜索范围spring-doc.cadn.net.cn

子树spring-doc.cadn.net.cn

搜索的默认范围。有效数值如下:spring-doc.cadn.net.cn

忽略未找到的名字spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

指定NameNotFoundException搜索时应该忽略。将该属性设置为true让因搜索库无效而导致的错误被默默吞噬。spring-doc.cadn.net.cn

忽略部分结果spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

指定部分结果异常搜索时应该忽略。一些LDAP服务器在推荐方面存在问题。这些通常应该自动执行。然而,如果这方法不起作用,它会表现为部分结果异常.将该属性设置为true为解决这个问题提供了一种变通方法。spring-doc.cadn.net.cn

ODM-refspring-doc.cadn.net.cn

该身份证ObjectDirectoryMapper实例。默认配置是默认配置DefaultObjectDirectoryMapper.spring-doc.cadn.net.cn

获取对基础LDAP路径的引用

如前所述,你可以提供一个基础的LDAP路径到上下文来源,指定LDAP树中所有作相对的根节点。这意味着你只需在系统中处理相对知名的名字,这通常非常方便。不过,在某些情况下,你可能需要访问基础路径,才能构造完整的DN,相对于LDAP树的实际根节点。一个例子是处理LDAP组时(例如,名字组对象类)。在这种情况下,每个组成员的属性值必须是被引用成员的完整DN。spring-doc.cadn.net.cn

因此,Spring LDAP 有一个机制,可以在启动时为任何 Spring 控制的豆子提供基础路径。 要让豆子收到基础路径的通知,需要具备两点条件。首先,想要基础路径引用的豆子需要实现BaseLdapNameAware接口。 其次,你需要定义一个BaseLdapPathBeanPostProcessor在应用的语境下。 以下示例展示了如何实现BaseLdapNameAware:spring-doc.cadn.net.cn

例子5。实施BaseLdapNameAware
public class PersonService implements PersonService, BaseLdapNameAware {
   ...
   private LdapName basePath;

   public void setBaseLdapPath(LdapName basePath) {
      this.basePath = basePath;
   }
   ...
   private LdapName getFullPersonDn(Person person) {
      return LdapNameBuilder.newInstance(basePath)
          .add(person.getDn())
          .build();
   }
   ...
}

以下示例展示了如何定义BaseLdapPathBeanPostProcessor:spring-doc.cadn.net.cn

例子6。在你的应用上下文中指定BaseLdapPathBeanPostProcessor
<beans>
   ...
   <ldap:context-source
          username="cn=Administrator"
          password="secret"
          url="ldap://localhost:389"
          base="dc=261consulting,dc=com" />
   ...
   <bean class="org.springframework.ldap.core.support.BaseLdapPathBeanPostProcessor" />
</beans>

默认行为BaseLdapPathBeanPostProcessor是使用单一定义的基路径BaseLdapPathSource (摘要上下文来源应用上下文.如果不止一个BaseLdapPathSource定义后,你需要通过设置baseLdapPathSourceName财产。spring-doc.cadn.net.cn