1.概述
本文将说明如何使用Maven设置Spring Security,并介绍使用Spring Security依赖项的特定用例。 最新的Spring Security版本可以在Maven Central上找到。
这是上一篇有关Maven的Spring的后续文章 ,因此对于非安全性Spring依赖项,这是开始的地方。
2.使用Maven的Spring Security
2.1。 Spring安全核心
核心Spring Security支持(即spring-security-core )包含身份验证和访问控制功能,并支持独立(非Web)应用程序,方法级安全性和JDBC:
<properties><org.springframework.security.version>3.1.4.RELEASE</org.springframework.security.version><org.springframework.version>3.2.4.RELEASE</org.springframework.version>
</properties>
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>${org.springframework.security.version}</version>
</dependency>
请注意,我们正在使用3.1.4.RELEASE版本的Spring Security – Spring和Spring Security的发布时间表不同 ,因此版本号之间没有1:1的匹配。
理解上也很重要的事实是,从直觉上讲, Spring Security 3.1.x不依赖于Spring 3.1.x发行版 –这是因为Spring Security 3.1.x是在Spring 3.1之前发行的。 计划是在将来的发行版中更紧密地调整这些依赖关系–有关更多详细信息,请参见JIRA。–目前,这具有实际意义,我们将在下一步进行探讨。
2.2。 Spring安全网
要添加对Spring Security的Web支持 ,需要spring-security-web依赖项:
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${org.springframework.security.version}</version>
</dependency>
它包含筛选器和相关的Web安全基础结构,可在Servlet环境中启用URL访问控制。
2.3。 Spring Security和较旧的Spring Core依赖关系问题
这个新的依赖关系也给Maven依赖关系图带来了一个问题 -如上所述,Spring Security可能依赖于3.0.x Spring依赖关系-这可能导致这些较旧的依赖关系在类路径之上,而不是较新的3.2.x Spring。文物。
要了解为什么会发生这种情况,我们需要查看Maven如何解决冲突 –在版本冲突的情况下,Maven会选择最接近树根的jar。 在我们的例子中, spring-jdbc既由spring-orm ( 3.2.2.RELEASE版本)定义,也由spring-security-web (以3.0.7.RELEASE版本)定义–因此,在两种情况下, spring- jdbc的定义距项目根pom的深度为1。 因此,在我们自己的pom中定义spring-orm和spring-security-web的顺序实际上很重要-第一个优先级较高,因此我们可以在classpath上使用这两个版本 。
要解决此问题,我们将必须在自己的pom中显式定义一些Spring依赖项 ,而不要依赖隐式Maven依赖项解析机制-这样做会将特定依赖项置于pom的深度0(如在pom中定义的那样)。 pom本身),因此将优先处理。 以下所有内容都属于同一类别,并且都需要直接定义,或者对于多模块项目,都必须在父项的dependencyManagement元素中进行明确定义:
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework.version}</version>
</dependency>
2.4。 spring-security-config等
要使用丰富的Spring Security XML名称空间,将需要spring-security-config依赖项:
<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${org.springframework.security.version}</version><scope>runtime</scope>
</dependency>
没有应用程序代码应针对此依赖关系进行编译,因此应将其范围限定为runtime 。
最后,LDAP,ACL,CAS和OpenID支持在Spring Security中具有它们自己的依赖性: spring-security-ldap , spring-security-acl , spring-security-cas和spring-security-openid 。
3.使用快照和里程碑
Spring提供的自定义Maven存储库中提供了Spring Security 里程碑和快照 -有关如何配置它们的更多详细信息,请参阅如何使用快照和里程碑 。
4。结论
本文讨论了将Spring Security与Maven结合使用的实际细节。 这里介绍的Maven依赖关系当然是一些主要的依赖关系,还有其他一些值得一提并且还没有削减的依赖关系。 尽管如此,这应该是在启用Maven的项目中使用Spring的一个很好的起点。
翻译自: https://www.javacodegeeks.com/2013/05/spring-security-with-maven.html