Guida a Spring Data LDAP

1. Introduzione

In questo articolo, ci concentreremo sull'integrazione e la configurazione di Spring Data LDAP. Per un'introduzione passo passo a Spring LDAP, dai una rapida occhiata a questo articolo.

Inoltre, puoi trovare la panoramica della guida JPA di Spring Data qui.

2. Dipendenza da Maven

Iniziamo aggiungendo le dipendenze Maven richieste:

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

Le ultime versioni possono essere trovate qui per spring-data-ldap.

3. Voce di dominio

Il progetto Spring LDAP offre la possibilità di mappare le voci LDAP agli oggetti Java utilizzando ODM (Object-Directory Mapping).

Definiamo l'entità che verrà utilizzata per mappare le directory LDAP che sono già state configurate nell'articolo 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 è simile a @Entity (di JPA / ORM) che viene utilizzato per specificare quale entità associa alla directory root delle voci LDAP.

Una classe Entry deve avere l' annotazione @Id dichiarata su un campo di tipo javax .naming.Name che rappresenta l'entità DN . L' annotazione @Attribute viene utilizzata per mappare i campi della classe oggetto ai campi entità.

4. Spring Data Repository

Spring Data Repository è un'astrazione che fornisce l'implementazione di base pronta all'uso di livelli di accesso ai dati per vari archivi di persistenza.

Spring Framework fornisce internamente l'implementazione delle operazioni CRUD per una data classe nel repository di dati. Possiamo trovare i dettagli completi nell'articolo Introduzione a Spring Data JPA.

Spring Data LDAP fornisce un'astrazione simile che fornisce l'implementazione automatica delle interfacce del repository che includono operazioni CRUD di base per le directory LDAP.

Inoltre, Spring Data Framework può creare una query personalizzata basata su un nome di metodo.

Definiamo la nostra interfaccia del repository che verrà utilizzata per gestire gli User Entry:

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

Come possiamo vedere, abbiamo dichiarato un'interfaccia estendendo LdapRepository per la voce User. Spring Data Framework fornirà automaticamente l'implementazione del metodo CRUD di base come find () , findAll () , save (), delete (), ecc.

Inoltre, abbiamo dichiarato alcuni metodi personalizzati. Spring Data Framework fornirà l'implementazione sondando il nome del metodo con una strategia nota come Query Builder Mechanism.

5. Configurazione

Possiamo configurare Spring Data LDAP utilizzando le classi @Configuration basate su Java o uno spazio dei nomi XML. Configuriamo il repository utilizzando l'approccio basato su Java:

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

@EnableLdapRepositories suggerisce a Spring di eseguire la scansione del pacchetto specificato per le interfacce contrassegnate come @Repository.

6. Logica aziendale

Definiamo la nostra classe di servizio che utilizzerà UserRepository per operare sulle directory LDAP:

@Service public class UserService { @Autowired private UserRepository userRepository; // business methods }

Ora, esploreremo un'azione alla volta e vedremo quanto facilmente possiamo eseguire queste azioni utilizzando Spring Data Repository

6.1. Autenticazione utente

Implementiamo ora un semplice pezzo di logica per autenticare un utente esistente:

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

6.2. Creazione dell'utente

Quindi, creiamo un nuovo utente e memorizziamo l'hash della password:

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

6.3. Modifica dell'utente

Possiamo modificare un utente o una voce esistente con il seguente metodo:

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

6.4. Ricerca utente

Possiamo cercare utenti esistenti utilizzando un metodo personalizzato:

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. Esempio in azione

Infine, possiamo testare rapidamente un semplice scenario di autenticazione:

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

8. Conclusione

Questo breve tutorial ha dimostrato le basi della configurazione del repository Spring LDAP e del funzionamento CRUD.

L'esempio utilizzato in questo articolo può essere trovato su GitHub.