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, как показано в следующем примере:
spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret
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, как это показано в следующем примере:
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);
}
}
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
, как показано ниже:
spring.ldap.embedded.base-dn=dc=spring,dc=io
spring:
ldap:
embedded:
base-dn: "dc=spring,dc=io"
Можно определять несколько значений базы поиска "base-dn", однако, поскольку отличительные имена обычно содержат запятые, их необходимо определять, используя корректурную запись (нотацию).
В yaml-файлах можно использовать списочную запись yaml. В файлы свойств необходимо включить индекс как часть имени свойства:
spring.ldap.embedded.base-dn[0]=dc=spring,dc=io
spring.ldap.embedded.base-dn[1]=dc=pivotal,dc=io
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
для определения кастомных типов атрибутов или классов объектов.