Spring Security met Maven

1. Overzicht

In dit artikel leggen we uit hoe u dit instelt Spring Security met Maven en bespreek specifieke use-cases van het gebruik van Spring Security-afhankelijkheden. U kunt de nieuwste releases van Spring Security vinden op Maven Central.

Dit is een vervolg op het vorige Spring met Maven-artikel, dus voor niet-beveiligde Spring-afhankelijkheden is dat de plek om te beginnen.

2. Lente-beveiliging met Maven

2.1. spring-security-core

De Core Spring Security-ondersteuning - spring-security-core - bevat authenticatie en toegangscontrole functionaliteit. Deze afhankelijkheid is verplicht om op te nemen voor alle projecten die Spring Security gebruiken.

Bovendien, spring-security-core ondersteunt de standalone (niet-web) applicaties, methodebeveiliging en JDBC:

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

Let daar op Spring en Spring Security hebben verschillende releaseschema's, dus er is niet altijd een 1: 1-overeenkomst tussen de versienummers.

Als u met oudere versies van Spring werkt, is het ook heel belangrijk om te begrijpen dat, onintuïtief, Spring Security 4.1.x is niet afhankelijk van Spring 4.1.x releases! Toen Spring Security 4.1.0 bijvoorbeeld werd uitgebracht, stond het Spring-kernraamwerk al op 4.2.x en bevat daarom die versie als compileerafhankelijkheid. Het plan is om deze afhankelijkheden in toekomstige releases beter op elkaar af te stemmen - zie deze JIRA voor meer details - maar voorlopig heeft dit praktische implicaties die we hierna zullen bekijken.

2.2. spring-security-web

Toevoegen Webondersteuning voor Spring Securityhebben we de spring-security-web afhankelijkheid:

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

Dit bevat filters en gerelateerde webbeveiligingsinfrastructuur die URL-toegangscontrole in een Servlet-omgeving mogelijk maakt.

2.3. Spring Security en Older Spring Core Dependencies Probleem

Deze nieuwe afhankelijkheid vertoont ook een probleem voor de Maven-afhankelijkheidsgrafiek. Zoals hierboven vermeld, zijn Spring Security-potten niet afhankelijk van de nieuwste Spring-kernpotten (maar van de vorige versie). Dit kan hiertoe leiden oudere afhankelijkheden zich een weg banen naar het klassenpad in plaats van de nieuwere 5.x Spring-artefacten.

Om te begrijpen waarom dit gebeurt, moeten we kijken hoe Maven lost conflicten op. In het geval van een versieconflict, kiest Maven de pot die zich het dichtst bij de wortel van de boom bevindt. Bijvoorbeeld, lente-kern wordt bepaald door beide lente-orm (met de 5.0.0.VRIJLATING versie) maar ook door spring-security-core (met de 5.0.2 VRIJGAVE versie). Dus in beide gevallen spring-jdbc wordt gedefinieerd op een diepte van 1 vanaf de root pom van ons project. Daarom maakt het eigenlijk uit in welke volgorde lente-orm en spring-security-core worden gedefinieerd in onze eigen pom. De eerste krijgt dus voorrang we kunnen eindigen met beide versies op ons klassenpad.

Om dit probleem aan te pakken, zullen we moeten definieer expliciet enkele van de Spring-afhankelijkheden in onze eigen pom en niet vertrouwen op het impliciete Maven-afhankelijkheidsresolutiemechanisme. Als u dit doet, wordt die specifieke afhankelijkheid op diepte 0 van onze pom geplaatst (zoals deze is gedefinieerd in de pom zelf), dus deze heeft prioriteit. Alle volgende vallen in dezelfde categorie en moeten allemaal expliciet worden gedefinieerd, hetzij rechtstreeks, hetzij, voor projecten met meerdere modules, in de afhankelijkheidsbeheer element van de ouder:

 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 en anderen

Om de rijke Spring Security XML-naamruimte en annotaties te gebruiken, hebben we de spring-security-config afhankelijkheid:

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

Ten slotte hebben LDAP-, ACL-, CAS-, OAuth- en OpenID-ondersteuning hun eigen afhankelijkheden in Spring Security: spring-security-ldap, spring-security-acl, spring-security-cas, spring-security-oauth en spring-security-openid.

2.5. spring-boot-starter-security

Wanneer u met Spring Boot werkt, is het spring-boot-starter-security starter zal automatisch alle afhankelijkheden opnemen, zoals spring-security-core, spring-security-web en spring-security-config onder andere:

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

Aangezien Spring Boot alle afhankelijkheden automatisch voor ons zal beheren, zal dit ook het eerder genoemde probleem met veerbeveiliging en oudere kernafhankelijkheden oplossen.

3. Snapshots en mijlpalen gebruiken

Spring Security-mijlpalen en snapshots zijn beschikbaar in de aangepaste Maven-opslagplaatsen van Spring. Zie Snapshots en mijlpalen gebruiken voor meer informatie over hoe u deze configureert.

4. Conclusie

In deze korte tutorial hebben we de praktische details van het gebruik van Spring Security met Maven. De Maven-afhankelijkheden die hier worden gepresenteerd, zijn natuurlijk enkele van de belangrijkste, en er zijn verschillende andere die het vermelden waard zijn en nog niet zijn gesneden. Desalniettemin zou dit een goed startpunt moeten zijn om Spring te gebruiken in een Maven-enabled project.