Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden

Ldap Schnittstelle mit Spring und iBatis

Die Realisierung einer Schnittstelle zu einem Ldap Respository ist nach wie vor mit einem erheb­li­chen Implementierungsaufwand ver­bun­den und gestal­tet sich oft als sehr unfle­xi­bel z.B. gegen­über Änderungen am Ldap Schema.

Beispiel für ein Ldap Schema und einen Ldap Eintrag:

Im Folgenden wird eine Lösung vor­ge­stellt, wie sich mit Hilfe eines Jdbc-Ldap Treibers und einem Persistenzframework rela­tiv schnell eine fle­xi­ble Ldap Schnittstelle rea­li­sie­ren lässt.

Kern der hier vor­ge­stell­ten Lösung ist der Jdbc-Ldap Treiber. Dieser Treiber simu­liert der Anwendung einen Jdbc kon­for­men Treiber und erlaubt SQL ähn­li­che Anfragen bei der Abfrage des Ldap Servers. Basierend auf dem Treiber kön­nen anschlie­ßend Persistenzframeworks ein­ge­setzt wer­den, wel­che den Treiber für die Abfragen nut­zen und die zurück­ge­ge­be­nen Daten in Java Objekte übersetzen.

Verwendete Bibliotheken

Jdbc-Ldap Treiber 2.1 Download

iBatis Persistenzframework 2.3.4 Download

Springframework 2.5.6

Quellcode

Für das Auslesen der Nutzer aus dem Ldap Repository benö­ti­gen wir zunächst ein­mal eine Klasse die unse­ren Nutzer repräsentiert.

Als nächs­tes imple­men­tie­ren wir für das Auslesen der Nutzer ein Data Access Objekt (DAO).

Das Interface UserDao defi­niert nur eine Methode listAllUser. Diese gibt alle User als Liste zurück.

Die Klasse UserDaoImpl nutzt für den Zugriff auf die Nutzerdaten das iBatis Framework. Das Springframework bie­tet dafür Hilfsklassen an, wovon eine hier als Oberklasse ver­wen­det wird (SqlMapClientDaoSupport).

Für die Konfiguration des iBatis Frameworks benö­ti­gen wir zwei Konfigurationsdateien (SqlMapConfig.xml und SqlMap.xml) in denen die SQL Statements und Objektmappings hin­ter­legt werden.

SqlMapConfig.xml

SqlMap.xml

Die Datei SqlMap.xml ent­hält die Definition des LDAP-SQL Statements mit dem die Nutzerdaten aus dem Ldap Repository aus­ge­le­sen wer­den und legt unsere User Klasse als Ergebnistyp fest.

Am Ende benö­ti­gen wir noch die Spring- und Datenbank Konfiguration um unsere Demo Applikation aus­füh­ren zu können.

Spring Application Context

database.properties

In der Datei database.properties wer­den für den Jdbc-Ldap Treiber die not­wen­di­gen Parameter hinterlegt.

Führt man nun die Anwendung aus und ruft die Methode listAllUser des UserDao aus wird eine Liste aller Nutzer des Ldap Repositories zurückgegeben.

Vorteile der Lösung:

  • Änderungen am Ldap Schema las­sen sich ein­fach in den iBatis Konfigurationsdateien nachziehen
  • Einfaches Mapping der Ldap Einträge auf Java Objekte
  • SQL ähn­li­che Ldap Abfragen
  • Java Quellcode ist von dem zugrunde lie­gen­dem Ldap Repository unab­hän­gig, d.h. ein Schwenk von einem Ldap Repository hin zu einer Datenbank wäre ohne gro­ßen Aufwand pro­blem­los möglich

Nachteile:

Neben den auf­ge­führ­ten Vorteilen der Lösung darf ein gra­vie­ren­der Nachteil der hier auf­ge­zeig­ten Lösung aber nicht uner­wähnt blei­ben. Nach genaue­rem Test des hier ver­wen­de­ten Jdbc-Ldap Treibers erwies er sich lei­der nicht als feh­ler­frei. Base64 kodierte Ldap Attribute wer­den von dem hier ver­wen­de­tem Treiber nicht kor­rekt deko­diert so dass er sich lei­der nicht für einen pro­duk­ti­ven Einsatz ver­wen­den lies.

Kompletter Quellcode der Demoanwendung: Demo Quellcode

Related Posts

Pin It on Pinterest