Spring Security avec Maven

Sécurité de printemps avec Maven

1. Vue d'ensemble

Cet article expliquera comment configurerSpring Security with Maven et passera en revue les cas d'utilisation spécifiques de l'utilisation des dépendances de Spring Security. Les dernières versions de Spring Security peuvent être trouvéeson Maven Central.

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

2. Sécurité de printemps 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, et prend en charge les applications autonomes (non Web), la sécurité au niveau de la méthode et JDBC:


    5.0.6.RELEASE
    5.0.6.RELEASE


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

Notez queSpring and Spring Security are on different release schedules, 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, involontairement,Spring Security 3.1.x do not depend on Spring 3.1.x releases! C'est parce que Spring Security 3.1.x a été publié avant Spring 3.1. Le plan est d'aligner ces dépendances plus étroitement dans les prochaines versions - voirthis 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 ajouterWeb support for Spring Security, la dépendancespring-security-web est requise:


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

Celui-ci contient des filtres et une infrastructure de sécurité Web associée permettant le contrôle d'accès d'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 égalementa problem for the Maven dependency graph - 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 conduire cesolder dependencies à se frayer un chemin sur le chemin de classe au lieu des nouveaux artefacts Spring 4.x.

Pour comprendre pourquoi cela se produit, nous devons regarder commentMaven resolves conficts - en cas de conflit de version, Maven choisira le fichier le plus proche de la racine de l'arbre. Dans notre cas,spring-core est défini à la fois parspring-orm (avec la version4.x.RELEASE) mais aussi parspring-security-core (avec l'ancienne version3.2.8.RELEASE) - donc dans 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 ordrespring-orm etspring-security-core sont définis dans notre propre pom - le premier sera prioritaire doncwe may end up with either version on our classpath.

Pour résoudre ce problème, nous devronsexplicitly define some of the Spring dependencies dans notre propre pom et ne pas compter sur le mécanisme de résolution de dépendance implicite de Maven - cela mettra cette dépendance particulière à la profondeur 0 de notre pom (tel qu'il est défini dans le pom lui-même ) donc il sera prioritaire. 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émentdependencyManagement 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 XML Spring Security, la dépendancespring-security-config sera requise:


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

Aucun code d'application ne doit compiler avec cette dépendance, il doit donc êtrescoped as runtime.

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

3. Utilisation d'instantanés et de jalons

Spring Securitymilestones ainsi quesnapshots 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, voirhow to use Snapshots and Milestones.

4. Conclusion

Cet article décrit les détails pratiques de l'utilisation deSpring Security with Maven. Les dépendances Maven présentées ici sont bien sûr quelques-unes des plus importantes, et il en existe plusieurs autres qui méritent d’être mentionnées et qui n’ont pas encore été retenues. Néanmoins, cela devrait être un bon point de départ pour utiliser Spring dans un projet activé par Maven.