Acegi Security in einer Stunde

Acegi Security hat bei Java-Unternehmensentwicklern einige ernsthafte positive Resonanz hervorgerufen, sodass Sie sich möglicherweise fragen, wie es funktioniert. In diesem Artikel führt Sie ShriKant Vashishtha durch alle Schritte einer praktischen Implementierung von Acegi Security. Zuerst richten Sie formularbasierte Authentifizierungs- und Autorisierungsdienste für eine Java-basierte Webanwendung ein, dann passen Sie Acegi Security für die dynamische Autorisierung sowie die Integration in proprietäre Authentifizierungsimplementierungen wie LDAP an.

Acegi Security ist eine leistungsstarke und flexible Sicherheitslösung für Java-Unternehmensanwendungen, die mit dem Spring-Framework erstellt wurden. Durch die federbasierte Abhängigkeitsinjektion ist Acegi einfach zu konfigurieren und auf völlig unaufdringliche Weise zu implementieren. Dies ist ein Segen für Unternehmen, die das Spring-Framework möglicherweise nicht als Ganzes implementieren möchten, aber dennoch effektive, wiederverwendbare Sicherheit für Legacy-Anwendungen benötigen.

Dieser Artikel bietet Ihnen einen kurzen Überblick über die Implementierung von Acegi Security für eine grundlegende Anwendung zur Auftragsabwicklung. Sie richten Authentifizierungs- und Autorisierungsdienste für die Anwendung ein und implementieren diese Sicherheitsfunktionen in formularbasierten Webseiten. Nachdem Sie das Beispiel durchgearbeitet haben, sollten Sie in etwa einer Stunde in der Lage sein, eine grundlegende formularbasierte Sicherheit für jede Webanwendung einzurichten.

Nach einer kurzen Einführung in das Implementierungsbeispiel erfahren Sie, wie Sie die Anwendungssicherheit mit Acegi anpassen können. Sie erfahren, wie Sie eine dynamische rollenbasierte Autorisierung basierend auf einer Datenbank einrichten, die Benutzerrollen URLs zuordnet. Schließlich erfahren Sie, wie Sie eine benutzerdefinierte Acegi Security-Authentifizierungsimplementierung erstellen, die in vorhandene proprietäre Authentifizierungsimplementierungen integriert werden kann.

Umgebung einrichten

Ich wollte die Anwendbarkeit von Acegi auf eine Vielzahl von Implementierungen demonstrieren, nicht nur auf Spring-basierte Anwendungen. Ich habe die Beispielanwendung mit JEE 5 mit JavaServer Pages für die Präsentationsschicht und SiteMesh für das Weblayout erstellt. Die Anwendung könnte genauso einfach mit Struts 2 erstellt werden, und die Struts 2-Infrastruktur ist bereits im Quellcode vorhanden, jedoch nicht implementiert. Ich habe Spring Dependency Injection verwendet, um die Acegi-Sicherheit für die Anwendung zu implementieren. Im Abschnitt Ressourcen können Sie den Quellcode der Anwendung herunterladen. Führen Sie die folgenden Schritte aus, um die Anwendungsumgebung einzurichten:

Schritt 1. Laden Sie Acegi, Spring 2 und SiteMesh herunter (Download-Links finden Sie unter Ressourcen).

Schritt 2. Erstellen Sie die folgende Ordnerstruktur in einem Java-Projekt:

src - Enthält Java-Quellcode

test - Enthält Testfälle

config - Jede Eigenschafts- / XML-Konfigurationsdatei, die sich im Klassenpfad befinden muss

web - Enthält die Webanwendung

|

decorators - Enthält SiteMesh-Dekoratoren

images - Enthält Bilder, falls vorhanden

scripts - JavaScript-Dateien

styles - Cascading Style Sheets (CSS)

WEB-INF

|

jsp - Enthält JavaServer Pages-Dateien (JSPs)

lib - Enthält JARs

Schritt 3. Kopieren Sie die folgenden JAR-Dateien in das Verzeichnis WEB-INF / lib:

  • acegi-security-1.0.5.jar - Hauptklassen des Acegi-Sicherheitssystems
  • cglib-2.1.3.jar - Von Spring verwendete Codegenerierungsbibliothek
  • commons-codec-1.3.jar - Encoder und Decoder wie Base64, Hex, Phonetic und URLs
  • commons-lang-2.1.jar- Hilfsprogramme für java.langAPIs
  • ehcache-1.2.3.jar - Wird für grundlegende Caching-Zwecke verwendet
  • freemarker-2.3.8.jar - Wird von der Struts-Implementierung verwendet
  • jstl.jar, standard.jar - JSTL-Tag-Bibliothek (JavaServer Pages Standard Tag Library)
  • log4j-1.2.13.jar - Zur Protokollierung
  • ognl-2.6.11.jar - OGNL-Bibliothek, die von der Struts-Implementierung verwendet wird
  • sitemesh-2.3.jar - SiteMesh JAR
  • spring.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Streben 2 Kern JAR
  • xwork-2.0.3.jar - Wird von Streben verwendet

Änderungen an web.xml

Da Acegi Security auf dem Konzept von Servlet-Filtern und Interceptors basiert , müssen FilterToBeanProxySie dem web.xmlDeployment-Deskriptor Ihrer Anwendung Einträge für den Filter hinzufügen , wie in Listing 1 gezeigt.

Listing 1. Hinzufügen von Servlet-Filtern zu web.xml

  AcegiTraining  contextConfigLocation /WEB-INF/applicationContext*.xml   Acegi Filter Chain Proxy  org.acegisecurity.util.FilterToBeanProxy   targetClass  org.acegisecurity.util.FilterChainProxy    ... ...  Acegi Filter Chain Proxy /j_acegi_security_check   Acegi Filter Chain Proxy /j_acegi_logout   Acegi Filter Chain Proxy *.action   Acegi Filter Chain Proxy *.jsp  ... 

FilterToBeanProxyerfordert einen Initialisierungsparameter , targetClass. Der targetClassParameter sucht das erste Objekt der angegebenen Klasse im Anwendungskontext. In der Konfiguration in Listing 1 ist diese Klasse org.acegisecurity.util.FilterChainProxy. Das zugehörige Bean-Objekt im Anwendungskontext ist filterChainProxyin Listing 2 dargestellt.

Listing 2: filterChainProxy


    
     class="org.acegisecurity.util.FilterChainProxy"> ... 
    

Beachten Sie, dass Listing 1 mehrere Filterzuordnungen für den Acegi-Filter definiert. Sie könnten stattdessen eine allgemeinere Filterzuordnung verwenden, wie in Listing 3 gezeigt.

Listing 3. Eine allgemeine Filterzuordnung

 Acegi Filter Chain Proxy /* 

Wenn Sie jedoch die Filterzuordnung in Listing 3 verwenden, wird jede URL vom Acegi-Filter abgefangen. Der Filter fordert jetzt auch Autorisierungsdetails für statische Ressourcen (JavaScript, CSS, HTML und Bilder) an, die Sie möglicherweise nicht sichern möchten. Sie können diese Falle vermeiden, indem Sie bestimmte URL-Muster verwenden.

Ordnung ist wichtig, wenn Servlet-Filter platziert werden. Da die Beispielanwendung Filter für Acegi, JSP und SiteMesh verwendet, müssen Sie zuerst den Acegi-Filter und anschließend die Filter JSP und SiteMesh platzieren.