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 для визначення кастомних типів атрибутів або класів об'єктів.