Leitfaden für Spring Data LDAP

Leitfaden zu Spring Data LDAP

1. Einführung

In diesem Artikelwe’ll focus on Spring Data LDAP integration and configuration. Eine schrittweise Einführung in Spring LDAP finden Sie inthis article.

Außerdem finden Sie eine Übersicht über den Spring Data JPA-Leitfadenhere.

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ürspring-data-ldap.

3. Domaineintrag

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

Definieren wir die Entität, die zum Zuordnen von LDAP-Verzeichnissen verwendet wird, die bereits inSpring LDAP articlekonfiguriert 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.

Für eineEntry-Klasse muss die Annotation@Id in einem Feld vom Typ javax.naming.Name deklariert sein, das die EntitätDN darstellt. Die Annotation@Attributewird 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 internally provides the implementation of CRUD operations für eine bestimmte Klasse im Datenrepository. Das vollständige Detail finden Sie im Artikel vonIntroduction to Spring Data JPA.

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

Außerdem kann Spring Data Frameworkcustom query basierend auf einem Methodennamen erstellen.

Definieren wir unsere Repository-Schnittstelle, die zum Verwalten vonUser Entry: 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 wirLdapRepository für EintragUser.erweitert haben. Spring Data Framework bietet automatisch grundlegende CRUD-Methodenimplementierungen wiefind(),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 namensQuery Builder Mechanism überprüft wird.

5. Aufbau

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

@Configuration
@EnableLdapRepositories(basePackages = "com.example.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, dieUserRepositoryverwendet, um mit LDAP-Verzeichnissen zu arbeiten:

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

    // business methods
}

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

6.1. Benutzerauthentifizierung

Implementieren wir nun eine einfache Logik, 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 Kennworts:

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

Wir können mit einer benutzerdefinierten Methode nach vorhandenen Benutzern 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 ein einfaches Authentifizierungsszenario schnell testen:

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

    assertEquals(true, isValid);
}

8. Fazit

In diesem kurzen Lernprogramm wurden die Grundlagen der Konfiguration des Spring LDAP-Repositorys und der CRUD-Operation erläutert.

Das in diesem Artikel verwendete Beispiel istover on GitHub.