Anleitung zu Spring Data LDAP

1. Einleitung

In diesem Artikel konzentrieren wir uns auf die Integration und Konfiguration von Spring Data LDAP. In diesem Artikel finden Sie eine schrittweise Einführung in Spring LDAP.

Die Übersicht über das Spring Data JPA-Handbuch finden Sie hier.

2. Maven- Abhängigkeit

Beginnen wir mit dem Hinzufügen der erforderlichen Maven-Abhängigkeiten:

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

Die neuesten Versionen finden Sie hier für spring-data-ldap.

3. Domaineintrag

Das Spring LDAP-Projekt bietet die Möglichkeit, LDAP-Einträge mithilfe der ODM (Object-Directory Mapping) Java-Objekten zuzuordnen.

Definieren wir die Entität, die zum Zuordnen von LDAP-Verzeichnissen verwendet wird, die bereits im Spring LDAP-Artikel konfiguriert wurden.

@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 ähnelt @Entity (von JPA / ORM), mit dem angegeben wird, welche Entität dem Verzeichnisstamm der LDAP-Einträge zugeordnet ist.

Ein Eintrag Klasse haben muss @Id Anmerkung erklärt auf einem Feld vom Typ javax .naming.Name die Einheit darstellt , DN . Die Annotation @Attribute wird verwendet, um Objektklassenfelder Entitätsfeldern zuzuordnen.

4. Spring Data Repository

Spring Data Repository ist eine Abstraktion, die eine sofort einsatzbereite Implementierung von Datenzugriffsschichten für verschiedene Persistenzspeicher bereitstellt.

Spring Framework bietet intern die Implementierung von CRUD-Operationen für eine bestimmte Klasse im Datenrepository. Das vollständige Detail finden Sie im Artikel Einführung in Spring Data JPA.

Spring Data LDAP bietet eine ähnliche Abstraktion, die die automatische Implementierung von Repository- Schnittstellen ermöglicht, die grundlegende CRUD-Operationen für LDAP-Verzeichnisse enthalten.

Außerdem kann Spring Data Framework eine benutzerdefinierte Abfrage basierend auf einem Methodennamen erstellen.

Definieren wir unsere Repository-Schnittstelle, die zur Verwaltung der Benutzereingabe verwendet wird:

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

Wie wir sehen können, haben wir eine Schnittstelle deklariert, indem wir LdapRepository für den Eintrag User erweitert haben. Spring Data Framework bietet automatisch grundlegende Implementierungen von CRUD-Methoden wie find () , findAll () , save (), delete () usw.

Außerdem haben wir einige benutzerdefinierte Methoden deklariert. Spring Data Framework stellt die Implementierung bereit, indem der Methodenname mit einer Strategie überprüft wird, die als Query Builder Mechanism bezeichnet wird.

5. Konfiguration

Wir können Spring Data LDAP mithilfe von Java-basierten @ Configuration- Klassen oder einem XML-Namespace konfigurieren . Lassen Sie uns das Repository mithilfe des Java-basierten Ansatzes konfigurieren:

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

@EnableLdapRepositories weist Spring an, das angegebene Paket nach Schnittstellen zu durchsuchen, die als @Repository gekennzeichnet sind.

6. Geschäftslogik

Definieren wir unsere Serviceklasse, die das UserRepository verwendet, um mit LDAP-Verzeichnissen zu arbeiten:

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

Jetzt werden wir jeweils eine Aktion untersuchen und sehen, wie einfach wir diese Aktion mit Spring Data Repository ausführen können

6.1. Benutzerauthentifizierung

Lassen Sie uns nun eine einfache Logik implementieren, um einen vorhandenen Benutzer zu authentifizieren:

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

6.2. Benutzererstellung

Als nächstes erstellen wir einen neuen Benutzer und speichern den Hash eines Passworts:

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

6.3. Benutzermodifikation

Wir können einen vorhandenen Benutzer oder Eintrag mit der folgenden Methode ändern:

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

6.4. Benutzersuche

Wir können nach vorhandenen Benutzern mit einer benutzerdefinierten Methode suchen:

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. Beispiel in Aktion

Schließlich können wir schnell ein einfaches Authentifizierungsszenario testen:

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

8. Fazit

Dieses kurze Tutorial demonstrierte die Grundlagen der Spring LDAP-Repository-Konfiguration und des CRUD-Betriebs.

Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.