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.