⌂ Index
Kapitel 27 · Security

Spring LDAP für Verzeichnisdienste

Typ: LibraryVersion 2 ausführlich

Spring LDAP vereinfacht LDAP-Zugriffe über Template-Ansatz, DirContextMapper und Integration mit Spring Security.

Fachliche Einordnung

LDAP ist in Unternehmen oft zentrale Benutzer- und Gruppenquelle. Saubere LDAP-Abfragen müssen sicher, performant und schema-aware sein.

Enterprise-Merksatz: Spring LDAP vereinfacht LDAP-Zugriffe über Template-Ansatz, DirContextMapper und Integration mit Spring Security.

Technische Darstellung

Service LdapTemplate Filter Directory Server DirContextMapper UserDetails
Kernkonzepte
  • LdapTemplate ähnlich JdbcTemplate.
  • DirContextMapper für Objektmapping.
  • Base DN und Filter sauber parametrisieren.
  • Paged Results und Suchgrenzen.
  • Integration in Authentifizierung und Gruppenauflösung.
Wann einsetzen?
  • Du liest Benutzer, Gruppen oder Organisationseinheiten aus LDAP.
  • Du migrierst JAAS/LDAP-Login.
  • Du brauchst Gruppen für Berechtigungsentscheidungen.
Typische Fehler und Risiken
  • LDAP Filter per Stringverkettung bauen.
  • Zu breite Suche ohne Base DN und Limits.
  • LDAP als Fachdatenspeicher missbrauchen.
Legacy- und Modernisierungssicht

Container- oder JAAS-basierte LDAP-Konfiguration wird in Spring Security/LDAP-Konfiguration und klare Directory-Adapter überführt.

Ausführliches Beispiel

Das Beispiel zeigt bewusst nicht nur Annotationen, sondern auch die Verantwortung der Schicht. In echten Projekten sollte der technische Spring-Code an Adapter- oder Konfigurationsrändern bleiben, während die Fachlogik testbar und möglichst frameworkarm bleibt.

@Repository
class LdapEmployeeDirectory {
    private final LdapTemplate ldap;

    List<EmployeeDirectoryEntry> findByDepartment(String department) {
        return ldap.search(
            query().base("ou=people").where("departmentNumber").is(department),
            (AttributesMapper<EmployeeDirectoryEntry>) attrs -> new EmployeeDirectoryEntry(
                attrs.get("uid").get().toString(),
                attrs.get("cn").get().toString()));
    }
}
Checkliste für Reviews
  • Ist die Verantwortung des Bausteins klar: Framework steuert Lebenszyklus, Library wird gezielt benutzt?
  • Ist die Fachlogik außerhalb von Controller, Listener, Repository-Implementierung oder Konfiguration?
  • Sind Fehlerfälle, Timeouts, Security, Monitoring und Tests sichtbar modelliert?
  • Gibt es klare Grenzen zwischen DTO, Domäne, Persistence und Infrastruktur?