Frühlingssicherheit mit Maven

1. Übersicht

In diesem Artikel wird erläutert, wie Sie Spring Security mit Maven einrichten und bestimmte Anwendungsfälle für die Verwendung von Spring Security-Abhängigkeiten erläutern . Sie finden die neuesten Spring Security-Versionen auf Maven Central.

Dies ist eine Fortsetzung des vorherigen Spring with Maven-Artikels. Bei nicht sicherheitsrelevanten Spring-Abhängigkeiten ist dies der Ausgangspunkt.

2. Frühlingssicherheit mit Maven

2.1. Feder-Sicherheitskern

Die Core Spring Security-Unterstützung - Spring-Security-Core - enthält Authentifizierungs- und Zugriffssteuerungsfunktionen. Diese Abhängigkeit muss für alle Projekte, die Spring Security verwenden, berücksichtigt werden.

Darüber hinaus unterstützt Spring-Security-Core die eigenständigen (Nicht-Web-) Anwendungen, die Sicherheit auf Methodenebene und JDBC:

 5.3.4.RELEASE 5.2.8.RELEASE   org.springframework.security spring-security-core ${spring-security.version} 

Beachten Sie, dass Spring und Spring Security unterschiedliche Release-Zeitpläne haben , sodass die Versionsnummern nicht immer 1: 1 übereinstimmen.

Wenn Sie mit älteren Versionen von Spring arbeiten, ist es auch sehr wichtig zu verstehen, dass Spring Security 4.1.x nicht intuitiv von Spring 4.1.x-Versionen abhängt! Als beispielsweise Spring Security 4.1.0 veröffentlicht wurde, befand sich das Spring Core Framework bereits in 4.2.x und enthält daher diese Version als Kompilierungsabhängigkeit. Es ist geplant, diese Abhängigkeiten in zukünftigen Versionen enger aufeinander abzustimmen - siehe diese JIRA für weitere Details -, aber dies hat vorerst praktische Auswirkungen, die wir als nächstes betrachten werden.

2.2. Feder-Sicherheits-Web

Um Webunterstützung für Spring Security hinzuzufügen , benötigen wir die Spring-Security-Web- Abhängigkeit:

 org.springframework.security spring-security-web ${spring-security.version} 

Diese enthält Filter und die zugehörige Web-Sicherheitsinfrastruktur, die die URL-Zugriffssteuerung in einer Servlet-Umgebung ermöglichen.

2.3. Problem mit der Federsicherheit und älteren Federkernabhängigkeiten

Diese neue Abhängigkeit weist auch ein Problem für den Maven-Abhängigkeitsgraphen auf. Wie oben erwähnt, hängen Spring Security-Gläser nicht von den neuesten Spring Core-Gläsern ab (sondern von der vorherigen Version). Dies kann dazu führen, dass diese älteren Abhängigkeiten anstelle der neueren 5.x Spring-Artefakte über den Klassenpfad gelangen.

Um zu verstehen, warum dies geschieht, müssen wir uns ansehen, wie Maven Konflikte löst. Im Falle eines Versionskonflikts wählt Maven das Glas aus, das der Wurzel des Baums am nächsten liegt. Zum Beispiel Federkern wird sowohl definiert feder ORM (mit 5.0.0 .RELEASE Version) , sondern auch durch federsicherheits Kern (mit 5.0.2.RELEASE Version). In beiden Fällen wird spring-jdbc in einer Tiefe von 1 vom Wurzel-Pom unseres Projekts definiert. Aus diesem Grund spielt es tatsächlich eine Rolle, in welcher Reihenfolge Feder-Orm und Feder-Sicherheitskern in unserem eigenen Pom definiert sind. Der erste wird also Vorrang habenMöglicherweise haben wir beide Versionen auf unserem Klassenpfad .

Um dieses Problem zu lösen, müssen wir einige der Spring-Abhängigkeiten in unserem eigenen POM explizit definieren und dürfen uns nicht auf den impliziten Maven-Abhängigkeitsauflösungsmechanismus verlassen. Wenn Sie dies tun, wird diese bestimmte Abhängigkeit von unserem Pom (wie im Pom selbst definiert) auf die Tiefe 0 gesetzt, sodass sie Priorität hat. Alle folgenden Elemente fallen in dieselbe Kategorie und müssen entweder direkt oder für Projekte mit mehreren Modulen im dependencyManagement- Element des übergeordneten Elements explizit definiert werden :

 org.springframework spring-core ${spring-version}   org.springframework spring-context ${spring-version}   org.springframework spring-jdbc ${spring-version}   org.springframework spring-beans ${spring-version}   org.springframework spring-aop ${spring-version}   org.springframework spring-tx ${spring-version}   org.springframework spring-expression ${spring-version}   org.springframework spring-web ${spring-version} 

2.4. spring-security-config und andere

Um den umfangreichen Spring Security XML-Namespace und die Annotationen verwenden zu können, benötigen wir die Abhängigkeit von spring-security-config :

 org.springframework.security spring-security-config ${spring-security.version} 

Schließlich haben LDAP-, ACL-, CAS-, OAuth- und OpenID-Unterstützung ihre eigenen Abhängigkeiten in Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth und spring-security-openid .

2.5. Spring-Boot-Starter-Sicherheit

Wenn mit Federverschluß arbeiten, die Feder-boot-Starter-Sicherheit wird Starter automatisch alle Abhängigkeiten enthalten wie federsicherheits Kern , Feder-security-Bahn und Feder-Sicherheits-config unter anderem:

 org.springframework.boot spring-boot-starter-security 2.3.3.RELEASE  

Da Spring Boot alle Abhängigkeiten automatisch für uns verwaltet, werden auch das zuvor erwähnte Problem der Federsicherheit und älterer Kernabhängigkeiten beseitigt.

3. Verwenden von Schnappschüssen und Meilensteinen

Spring Security-Meilensteine ​​sowie Schnappschüsse sind in den von Spring bereitgestellten benutzerdefinierten Maven-Repositorys verfügbar. Weitere Informationen zum Konfigurieren dieser finden Sie unter Verwenden von Snapshots und Meilensteinen.

4. Fazit

In diesem kurzen Tutorial haben wir die praktischen Details der Verwendung von Spring Security mit Maven besprochen . Die hier vorgestellten Maven-Abhängigkeiten sind natürlich einige der wichtigsten, und es gibt einige andere, die erwähnenswert sein können und die noch nicht gekürzt wurden. Dies sollte jedoch ein guter Ausgangspunkt für die Verwendung von Spring in einem Maven-fähigen Projekt sein.