Spring Security con Maven

1. Panoramica

In questo articolo, spiegheremo come configurare Spring Security con Maven e analizzeremo casi d'uso specifici dell'utilizzo delle dipendenze di Spring Security. È possibile trovare le ultime versioni di Spring Security su Maven Central.

Questo è il seguito del precedente articolo Spring with Maven, quindi per le dipendenze Spring non di sicurezza, questo è il punto di partenza.

2. Sicurezza primaverile con Maven

2.1. spring-security-core

Il supporto Core Spring Security - spring-security-core - contiene funzionalità di autenticazione e controllo degli accessi. Questa dipendenza è obbligatoria da includere per tutti i progetti che utilizzano Spring Security.

Inoltre, spring-security-core supporta le applicazioni autonome (non Web), la sicurezza a livello di metodo e JDBC:

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

Tieni presente che Spring e Spring Security hanno programmi di rilascio diversi , quindi non c'è sempre una corrispondenza 1: 1 tra i numeri di versione.

Se stai lavorando con versioni precedenti di Spring, è anche molto importante capire il fatto che, in modo non intuitivo, Spring Security 4.1.x non dipende dalle versioni Spring 4.1.x. Ad esempio, quando è stato rilasciato Spring Security 4.1.0, il framework principale di Spring era già a 4.2.xe quindi include quella versione come dipendenza dalla compilazione. Il piano è di allineare queste dipendenze più strettamente nelle versioni future - vedere questo JIRA per maggiori dettagli - ma per il momento questo ha implicazioni pratiche che vedremo in seguito.

2.2. primavera-sicurezza-web

Per aggiungere il supporto Web per Spring Security , abbiamo bisogno della dipendenza spring-security-web :

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

Contiene filtri e la relativa infrastruttura di sicurezza web che abilita il controllo dell'accesso all'URL in un ambiente Servlet.

2.3. Spring Security e vecchio problema delle dipendenze di Spring Core

Questa nuova dipendenza presenta anche un problema per il grafico delle dipendenze di Maven. Come accennato in precedenza, i jar Spring Security non dipendono dagli ultimi core jars Spring (ma dalla versione precedente). Ciò può portare a queste dipendenze più vecchie che si fanno strada in cima al classpath invece dei più recenti artefatti 5.x Spring.

Per capire perché questo sta accadendo, dobbiamo guardare a come Maven risolve i conflitti. In caso di conflitto di versione, Maven sceglierà il jar più vicino alla radice dell'albero. Ad esempio, spring-core è definito sia da spring-orm (con la versione 5.0.0 .RELEASE ) ma anche da spring-security-core (con la versione 5.0.2.RELEASE ). Quindi, in entrambi i casi, spring-jdbc è definito a una profondità di 1 dalla radice pom del nostro progetto. Per questo motivo, importerà effettivamente in quale ordine spring-orm e spring-security-core siano definiti nel nostro pom. Il primo avrà la priorità quindipotremmo ritrovarci con entrambe le versioni sul nostro classpath .

Per risolvere questo problema, dovremo definire esplicitamente alcune delle dipendenze di Spring nel nostro pom e non fare affidamento sul meccanismo implicito di risoluzione delle dipendenze di Maven. In questo modo quella particolare dipendenza a profondità 0 dal nostro pom (come è definito nel pom stesso), quindi avrà la priorità. Tutti i seguenti elementi rientrano nella stessa categoria e devono essere tutti esplicitamente definiti, direttamente o, per i progetti multimodulo, nell'elemento dependencyManagement del genitore:

 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 e altri

Per utilizzare il ricco spazio dei nomi XML e le annotazioni Spring Security, avremo bisogno della dipendenza spring-security-config :

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

Infine, il supporto LDAP, ACL, CAS, OAuth e OpenID hanno le proprie dipendenze in Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth e spring-security-openid .

2.5. Spring-boot-starter-security

Quando si lavora con Spring Boot, lo spring-boot-starter-security starter includerà automaticamente tutte le dipendenze come spring-security-core , spring-security-web e spring-security-config tra le altre:

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

Poiché Spring Boot gestirà automaticamente tutte le dipendenze per noi, questo eliminerà anche il problema della sicurezza primaverile e delle dipendenze di base precedenti menzionato in precedenza.

3. Utilizzo di istantanee e pietre miliari

Le pietre miliari di Spring Security, così come le istantanee, sono disponibili nei repository Maven personalizzati forniti da Spring. Per ulteriori dettagli su come configurarli, vedere come utilizzare Snapshot e Milestones.

4. Conclusione

In questo breve tutorial, abbiamo discusso i dettagli pratici dell'utilizzo di Spring Security con Maven . Le dipendenze Maven presentate qui sono ovviamente alcune delle principali, e ce ne sono molte altre che potrebbero valere la pena menzionare e non sono ancora state tagliate. Tuttavia, questo dovrebbe essere un buon punto di partenza per l'utilizzo di Spring in un progetto abilitato per Maven.