Ръководство за Spring Data LDAP

1. Въведение

В тази статия ще се съсредоточим върху интеграцията и конфигурирането на LDAP Spring Data. За поетапно въведение в Spring LDAP, разгледайте набързо тази статия.

Също така можете да намерите общия преглед на Spring Data JPA guide тук.

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

Нека започнем с добавяне на необходимите зависимости на Maven:

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

Най-новите версии можете да намерите тук за spring-data-ldap.

3. Въвеждане на домейн

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

Нека дефинираме обекта, който ще се използва за картографиране на LDAP директории, които вече са конфигурирани в пролетната 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 записите.

Един Влизане клас трябва да има @Id анотация обявен на поле от тип javax .naming.Name което представлява образувание DN . В @Attribute анотацията се използва за карта обект клас полета до автономните области.

4. Пролетно хранилище за данни

Spring Data Repository е абстракция, която предоставя основни готови за използване внедряване на слоеве за достъп до данни за различни хранилища за постоянство.

Spring Framework вътрешно осигурява изпълнението на CRUD операции за даден клас в хранилището на данни. Пълните подробности можем да намерим в статията JPA на Spring Data.

Spring Data LDAP осигурява подобна абстракция, която осигурява автоматично внедряване на интерфейси на хранилището, които включват основна 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); }

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

Също така декларирахме няколко персонализирани метода. Spring Data Framework ще осигури реализацията чрез сондиране на името на метода със стратегия, известна като механизъм за изграждане на заявки.

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

Можем да конфигурираме Spring Data LDAP, използвайки Java-базирани @Configuration класове или 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 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); }

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.