LDAP (Lightweight Directory Access Protocol) – это открытый, платформонезависимый, стандартизированный отраслевой протокол прикладного уровня для организации доступа и сопровождения распределенных информационных служб каталогов через IP-сеть. Spring Boot предусматривает автоконфигурацию для любого совместимого LDAP-сервера, а также средства поддержки встраиваемого LDAP-сервера, размещаемого в оперативной памяти, из UnboundID.

LDAP-абстракции предоставляются через Spring Data LDAP. Для удобного сбора зависимостей существует "стартер" spring-boot-starter-data-ldap.

Подключение к LDAP-серверу

Чтобы подключиться к LDAP-серверу, убедитесь, что вы объявили зависимость от "стартера" spring-boot-starter-data-ldap или spring-ldap-core, а затем объявите URL-адрес вашего сервера в вашем application.properties, как показано в следующем примере:

Properties
spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret
Yaml
spring:
  ldap:
    urls: "ldap://myserver:1235"
    username: "admin"
    password: "secret"

Если необходимо настроить параметры подключения, можно использовать свойства spring.ldap.base и spring.ldap.base-environment.

LdapContextSource автоматически конфигурируется на основе этих параметров. Если имеется бин DirContextAuthenticationStrategy, он привязывается к автоконфигурируемому LdapContextSource. Если нужно настроить его, например, на использование PooledContextSource, все равно можно внедрить автоконфигурируемый LdapContextSource. Обязательно отметьте ваш настроенный ContextSource как @Primary, чтобы автоконфигурируемый LdapTemplate мог использовать его.

Репозитории Spring Data LDAP

Spring Data содержит средства поддержки репозиториев для LDAP.

Автоконфигурируемый экземпляр LdapTemplate можно внедрять так же, как и любой другой Spring Bean, как это показано в следующем примере:

Java
import java.util.List;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
    private final LdapTemplate template;
    public MyBean(LdapTemplate template) {
        this.template = template;
    }
    // ...
    public List<User> someMethod() {
        return this.template.findAll(User.class);
    }
}
Kotlin
import org.springframework.ldap.core.LdapTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: LdapTemplate) {
    // ...
    fun someMethod(): List<User> {
        return template.findAll(User::class.java)
    }
}

Встраиваемый LDAP-сервер, размещаемый в оперативной памяти

Для целей тестирования Spring Boot поддерживает автоконфигурирование LDAP-сервера, размещаемого в оперативной памяти, из UnboundID. Чтобы сконфигурировать сервер, добавьте зависимость com.unboundid:unboundid-ldapsdk и объявите свойство spring.ldap.embedded.base-dn, как показано ниже:

Properties
spring.ldap.embedded.base-dn=dc=spring,dc=io
Yaml
spring:
  ldap:
    embedded:
      base-dn: "dc=spring,dc=io"

Можно определять несколько значений базы поиска "base-dn", однако, поскольку отличительные имена обычно содержат запятые, их необходимо определять, используя корректурную запись (нотацию).

В yaml-файлах можно использовать списочную запись yaml. В файлы свойств необходимо включить индекс как часть имени свойства:

Properties
spring.ldap.embedded.base-dn[0]=dc=spring,dc=io
spring.ldap.embedded.base-dn[1]=dc=pivotal,dc=io
Yaml
spring.ldap.embedded.base-dn:
  - "dc=spring,dc=io"
  - "dc=pivotal,dc=io"

По умолчанию сервер запускается через случайный порту, а также инициирует запуск стандартных сресдтв поддержки для LDAP. Задавать свойство spring.ldap.urls нет необходимости.

Если в classpath есть файл schema.ldif, он используется для инициализации сервера. Если вы хотите загрузить скрипт инициализации из другого ресурса, то также можете использовать свойство spring.ldap.embedded.ldif.

По умолчанию для валидации файлов в формате LDIF используется стандартная схема. Можно полностью отключить валидацию, установив свойство spring.ldap.embedded.validation.enabled. Если имеются кастомные атрибуты, можно использовать spring.ldap.embedded.validation.schema для определения кастомных типов атрибутов или классов объектов.