Spring Security avec Maven

1. Vue d'ensemble

Dans cet article, nous expliquerons comment configurer Spring Security avec Maven et passerons en revue les cas d'utilisation spécifiques de l'utilisation des dépendances Spring Security. Vous pouvez trouver les dernières versions de Spring Security sur Maven Central.

Ceci est un suivi de l'article précédent de Spring with Maven, donc pour les dépendances Spring non liées à la sécurité, c'est le point de départ.

2. Spring Security avec Maven

2.1. spring-security-core

La prise en charge de Core Spring Security - spring-security-core - contient des fonctionnalités d'authentification et de contrôle d'accès. Cette dépendance est obligatoire pour tous les projets utilisant Spring Security.

De plus, spring-security-core prend en charge les applications autonomes (non Web), la sécurité au niveau de la méthode et JDBC:

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

Notez que Spring et Spring Security ont des calendriers de publication différents , il n'y a donc pas toujours de correspondance 1: 1 entre les numéros de version.

Si vous travaillez avec des versions plus anciennes de Spring, il est également très important de comprendre le fait que, de manière non intuitive, Spring Security 4.1.x ne dépend pas des versions Spring 4.1.x! Par exemple, lorsque Spring Security 4.1.0 a été publié, le framework de base Spring était déjà à 4.2.x et inclut donc cette version comme dépendance de compilation. Le plan est d'aligner ces dépendances plus étroitement dans les versions futures - voir ce JIRA pour plus de détails - mais pour le moment, cela a des implications pratiques que nous examinerons ensuite.

2.2. spring-security-web

Pour ajouter la prise en charge Web de Spring Security , nous avons besoin de la dépendance spring-security-web :

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

Il contient des filtres et l'infrastructure de sécurité Web associée qui permet le contrôle d'accès URL dans un environnement Servlet.

2.3. Problème de sécurité Spring et de dépendances plus anciennes de Spring Core

Cette nouvelle dépendance présente également un problème pour le graphe de dépendances Maven. Comme mentionné ci-dessus, les jars Spring Security ne dépendent pas des derniers jars du noyau Spring (mais de la version précédente). Cela peut amener ces anciennes dépendances à se frayer un chemin sur le chemin de classe au lieu des nouveaux artefacts Spring 5.x.

Pour comprendre pourquoi cela se produit, nous devons examiner comment Maven résout les conflits. En cas de conflit de version, Maven choisira le pot le plus proche de la racine de l'arbre. Par exemple, spring-core est défini à la fois par spring-orm (avec la version 5.0.0 .RELEASE ) mais aussi par spring-security-core (avec la version 5.0.2.RELEASE ). Donc dans les deux cas, spring-jdbc est défini à une profondeur de 1 à partir du pom racine de notre projet. Pour cette raison, il importera en fait dans quel ordre spring-orm et spring-security-core sont définis dans notre propre pom. Le premier sera prioritaire doncnous pouvons nous retrouver avec l'une ou l'autre version sur notre chemin de classe .

Pour résoudre ce problème, nous devrons définir explicitement certaines des dépendances Spring dans notre propre pom et ne pas nous fier au mécanisme implicite de résolution des dépendances Maven. Faire cela mettra cette dépendance particulière à la profondeur 0 de notre pom (telle qu'elle est définie dans le pom lui-même), donc elle aura la priorité. Tous les éléments suivants appartiennent à la même catégorie et doivent tous être explicitement définis, soit directement, soit, pour les projets multi-modules, dans l' élément dependencyManagement du parent:

 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 et autres

Pour utiliser le riche espace de noms et les annotations XML Spring Security, nous aurons besoin de la dépendance spring-security-config :

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

Enfin, le support LDAP, ACL, CAS, OAuth et OpenID ont leurs propres dépendances dans Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth et spring-security-openid .

2.5. ressort-boot-starter-security

Lorsque vous travaillez avec Spring Boot, le démarreur spring-boot-starter-security inclura automatiquement toutes les dépendances telles que spring-security-core , spring-security-web et spring-security-config, entre autres:

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

Étant donné que Spring Boot gérera automatiquement toutes les dépendances pour nous, cela éliminera également le problème de sécurité du printemps et les anciens problèmes de dépendances de base mentionnés précédemment.

3. Utilisation d'instantanés et de jalons

Les jalons Spring Security, ainsi que les instantanés, sont disponibles dans les référentiels Maven personnalisés fournis par Spring. Pour plus de détails sur la façon de les configurer, voyez comment utiliser les instantanés et les jalons.

4. Conclusion

Dans ce tutoriel rapide, nous avons discuté des détails pratiques de l'utilisation de Spring Security avec Maven . Les dépendances Maven présentées ici sont bien sûr certaines des plus importantes, et il y en a plusieurs autres qui méritent d'être mentionnées et qui n'ont pas encore été coupées. Néanmoins, cela devrait être un bon point de départ pour utiliser Spring dans un projet compatible Maven.