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

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

1. Вступление

В этой статьеwe’ll focus on Spring Data LDAP integration and configuration. Для пошагового ознакомления с Spring LDAP взгляните наthis article.

Также вы можете найти обзор руководства Spring Data JPAhere.

2. специалист зависимость

Давайте начнем с добавления необходимых зависимостей 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 article.

@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.Name, которое представляет объектDN. Аннотация@Attribute используется для сопоставления полей класса объекта с полями сущности.

4. Spring Data Repository

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

Spring Framework internally provides the implementation of CRUD operations для данного класса в репозитории данных. Мы можем найти полную информацию в статьеIntroduction to Spring Data JPA.

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

Кроме того, Spring Data Framework может создаватьcustom query на основе имени метода.

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

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

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

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

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

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

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

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

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

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

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

    // business methods
}

Теперь мы рассмотрим одно действие за раз и посмотрим, насколько легко мы можем выполнить это действие, используя Spring Data Repository.

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);
}

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

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.

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