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-Sicherheitssystemscglib-2.1.3.jar
- Von Spring verwendete Codegenerierungsbibliothekcommons-codec-1.3.jar
- Encoder und Decoder wie Base64, Hex, Phonetic und URLscommons-lang-2.1.jar
- Hilfsprogramme fürjava.lang
APIsehcache-1.2.3.jar
- Wird für grundlegende Caching-Zwecke verwendetfreemarker-2.3.8.jar
- Wird von der Struts-Implementierung verwendetjstl.jar, standard.jar
- JSTL-Tag-Bibliothek (JavaServer Pages Standard Tag Library)log4j-1.2.13.jar
- Zur Protokollierungognl-2.6.11.jar
- OGNL-Bibliothek, die von der Struts-Implementierung verwendet wirdsitemesh-2.3.jar
- SiteMesh JARspring.jar
- Spring Framework JARstruts2-core-2.0.8.jar
- Streben 2 Kern JARxwork-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 FilterToBeanProxy
Sie dem web.xml
Deployment-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 ...
FilterToBeanProxy
erfordert einen Initialisierungsparameter , targetClass
. Der targetClass
Parameter 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 filterChainProxy
in 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.