Рубрики
Без рубрики

Руководство по Spring Data LDAP

Узнайте, как использовать данные Spring с LDAP.

Автор оригинала: baeldung.

1. введение

В этой статье мы сосредоточимся на интеграции и настройке LDAP Spring Data. Для пошагового введения в Spring LDAP быстро ознакомьтесь с этой статьей .

Кроме того, вы можете найти обзор руководства Spring Data JPA здесь .

2. Зависимость Maven

Давайте начнем с добавления необходимых зависимостей Maven:


    org.springframework.data
    spring-data-ldap
    1.0.6.RELEASE

Последние версии можно найти здесь для spring-data-ldap .

3. Запись в Домен

Проект Spring LDAP предоставляет возможность сопоставлять записи LDAP с объектами Java с помощью Object-Directory Mapping (ODM) .

Давайте определим сущность, которая будет использоваться для сопоставления каталогов LDAP, которые уже были настроены в статье Spring LDAP .

@Entry(
  base = "ou=users", 
  objectClasses = { "person", "inetOrgPerson", "top" })
public class User {
    @Id
    private Name id;
    
    private @Attribute(name = "cn") String username;
    private @Attribute(name = "sn") String password;

    // standard getters/setters
}

@Entry аналогичен @Entity (из JPA/ORM), который используется для указания, какая сущность сопоставляется с корневым каталогом записей LDAP.

Класс Entry должен иметь @Id аннотацию, объявленную в поле типа javax .naming.Имя , представляющее сущность DN . Аннотация @Attribute используется для сопоставления полей класса объектов с полями сущностей.

4. Хранилище данных Spring

Хранилище данных Spring – это абстракция, которая обеспечивает базовую готовую к использованию реализацию уровней доступа к данным для различных хранилищ персистентности.

Spring Framework внутренне обеспечивает реализацию операций CRUD для данного класса в репозитории данных. Мы можем найти полную информацию в Введение в Spring Data JPA статья.

Spring Data LDAP предоставляет аналогичную абстракцию, которая обеспечивает автоматическую реализацию интерфейсов Repository , которые включают базовую операцию CRUD для каталогов LDAP.

Кроме того, Spring Data Framework может создавать пользовательский запрос на основе имени метода.

Давайте определим наш интерфейс репозитория, который будет использоваться для управления Записью пользователя:

@Repository
public interface UserRepository extends LdapRepository {
    User findByUsername(String username);
    User findByUsernameAndPassword(String username, String password);
    List findByUsernameLikeIgnoreCase(String username);
}

Как мы видим, мы объявили интерфейс, расширив Репозиторий Ldap для входа Пользователя. Spring Data Framework автоматически обеспечит базовую реализацию метода CRUD, такую как find () , findAll () , save (), | delete (), и т.д.

Кроме того, мы объявили несколько пользовательских методов. Spring Data Framework обеспечит реализацию, исследуя имя метода с помощью стратегии, известной как Механизм построения запросов .

5. Конфигурация

Мы можем настроить Spring Data LDAP с помощью классов @Configuration на основе Java или пространства имен XML. Давайте настроим репозиторий, используя подход на основе Java:

@Configuration
@EnableLdapRepositories(basePackages = "com.baeldung.ldap.**")
public class AppConfig {
}

@EnableLdapRepositories подсказки Spring для сканирования данного пакета на наличие интерфейсов, помеченных как @Repository.

6. Бизнес-логика

Давайте определим наш класс обслуживания, который будет использовать UserRepository для работы с каталогами LDAP:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // business methods
}

Теперь мы рассмотрим одно действие за раз и посмотрим, насколько легко мы можем выполнить эти действия с помощью хранилища данных Spring

6.1. Аутентификация Пользователя

Давайте теперь реализуем простую логику для аутентификации существующего пользователя:

public Boolean authenticate(String u, String p) {
    return userRepository.findByUsernameAndPassword(u, p) != null;
}

6.2. Создание пользователя

Далее, давайте создадим нового пользователя и сохраним хэш пароля:

public void create(String username, String password) {
    User newUser = new User(username,digestSHA(password));
    newUser.setId(LdapUtils.emptyLdapName());
    userRepository.save(newUser);
}

6.3. Изменение пользователя

Мы можем изменить существующего пользователя или запись следующим способом:

public void modify(String u, String p) {
    User user = userRepository.findByUsername(u);
    user.setPassword(p);
    userRepository.save(user);
}

6.4. Поиск пользователей

Мы можем искать существующих пользователей с помощью пользовательского метода:

public List search(String u) {
    List userList = userRepository
      .findByUsernameLikeIgnoreCase(u);
    
    if (userList == null) {
        return Collections.emptyList();
    }

    return userList.stream()
      .map(User::getUsername)
      .collect(Collectors.toList());  
}

7. Пример в действии

Наконец, мы можем быстро протестировать простой сценарий аутентификации:

@Test
public void givenLdapClient_whenCorrectCredentials_thenSuccessfulLogin() {
    Boolean isValid = userService.authenticate(USER3, USER3_PWD);
 
    assertEquals(true, isValid);
}

8. Заключение

Этот краткий учебник продемонстрировал основы конфигурации репозитория Spring LDAP и работы с CRUD.

Пример, используемый в этой статье, можно найти на GitHub .