Frühlingssicherheit mit Maven

Frühlingssicherheit mit Maven

1. Überblick

In diesem Artikel wird erläutert, wieSpring Security with Maven eingerichtet werden, und es werden bestimmte Anwendungsfälle für die Verwendung von Spring Security-Abhängigkeiten erläutert. Die neuesten Spring Security-Versionen finden Sie unteron Maven Central.

Dies ist eine Fortsetzung der vorherigenSpring with Maven article. Bei nicht sicherheitsrelevanten Spring-Abhängigkeiten ist dies der Ausgangspunkt.

2. Frühlingssicherheit mit Maven

2.1. spring-security-core

Die Core Spring Security-Unterstützung -spring-security-core - enthält Authentifizierungs- und Zugriffssteuerungsfunktionen und unterstützt eigenständige (Nicht-Web-) Anwendungen, Sicherheit auf Methodenebene und JDBC:


    5.0.6.RELEASE
    5.0.6.RELEASE


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

Beachten Sie, dassSpring and Spring Security are on different release schedules ist, sodass zwischen den Versionsnummern nicht immer 1: 1 übereinstimmt.

Wenn Sie mit älteren Versionen von Spring arbeiten, ist es auch sehr wichtig zu verstehen, dassSpring Security 3.1.x do not depend on Spring 3.1.x releases! unbeabsichtigt angezeigt wird. Dies liegt daran, dass Spring Security 3.1.x vor Spring 3.1 veröffentlicht wurde. Es ist geplant, diese Abhängigkeiten in zukünftigen Versionen enger aufeinander abzustimmen - siehethis JIRA für weitere Details -, aber dies hat vorerst praktische Auswirkungen, die wir als nächstes betrachten werden.

2.2. spring-security-web

UmWeb support for Spring Security hinzuzufügen, ist die Abhängigkeit vonspring-security-web erforderlich:


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

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

2.3. Federsicherheit und ältere Federkernabhängigkeiten Problem __

Diese neue Abhängigkeit weist aucha problem for the Maven dependency graph auf - wie oben erwähnt, hängen Spring Security-Jars nicht von den neuesten Spring Core-Jars ab (sondern von der vorherigen Version). Dies kann dazu führen, dass dieseolder dependenciesanstelle der neueren 4.x Spring-Artefakte über den Klassenpfad gelangen.

Um zu verstehen, warum dies geschieht, müssen wir uns ansehen, wieMaven resolves conficts - im Falle eines Versionskonflikts wählt Maven das Glas aus, das der Wurzel des Baums am nächsten liegt. In unserem Fall wirdspring-core sowohl durchspring-orm (mit der4.x.RELEASE-Version) als auch durchspring-security-core (mit der alten3.2.8.RELEASE-Version) definiert In beiden Fällen wirdspring-jdbc in einer Tiefe von 1 vom Wurzel-Pom unseres Projekts definiert. Aus diesem Grund spielt es tatsächlich eine Rolle, in welcher Reihenfolgespring-orm undspring-security-core in unserem eigenen Pom definiert sind - der erste wird Priorität haben, alsowe may end up with either version on our classpath.

Um dieses Problem zu lösen, müssen wirexplicitly define some of the Spring dependencies in unserem eigenen POM verwenden und uns nicht auf den impliziten Maven-Abhängigkeitsauflösungsmechanismus verlassen. Dadurch wird diese bestimmte Abhängigkeit von unserem POM auf die Tiefe 0 gesetzt (wie im POM selbst definiert) ) also wird es Priorität haben. Alle folgenden Elemente fallen in dieselbe Kategorie und müssen explizit entweder direkt oder für Projekte mit mehreren Modulen im ElementdependencyManagementdes ü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 XML-Namespace von Spring Security verwenden zu können, ist die Abhängigkeit vonspring-security-configerforderlich:


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

Für diese Abhängigkeit sollte kein Anwendungscode kompiliert werden, daher sollte esscoped as runtime sein.

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

3. Verwenden von Schnappschüssen und Meilensteinen

Spring Securitymilestones sowiesnapshots sind in den von Spring bereitgestellten benutzerdefinierten Maven-Repositorys verfügbar. Weitere Informationen zum Konfigurieren dieser Repositorys finden Sie unterhow to use Snapshots and Milestones.

4. Fazit

Dieser Artikel beschreibt die praktischen Details der Verwendung vonSpring Security with Maven. Die hier vorgestellten Maven-Abhängigkeiten sind natürlich einige der wichtigsten, und es gibt einige andere, die erwähnenswert sein könnten und die noch nicht gekürzt wurden. Trotzdem sollte dies ein guter Ausgangspunkt für die Verwendung von Spring in einem Maven-fähigen Projekt sein.