Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理

it2025-06-12  35

原文链接: Spring Security with Maven 原文日期: 2013年04月24日 翻译日期: 2014年06月29日 翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Maven 管理 Spring Security 和 Spring 的依赖关系.最新的Spring Security公布版本号能够在 Maven Central仓库 中找到. 译者建议訪问 MVNRespotory中org.springframework.security链接。 本文是 使用Maven管理Spring  的续集, 所以对于非 Spring Security 的其它 Spring依赖,请查看 前文. 2. Spring Security与Maven2.1. spring-security-core Spring Security的核心支持 —— spring-security-core —— 包括身份认证(authentication)和訪问控制(access control)功能,支持独立的(非web)应用程序,方法级的安全性和JDBC: <properties> <org.springframework.security.version>3.2.3.RELEASE</org.springframework.security.version> <org.springframework.version>4.0.4.RELEASE</org.springframework.version> </properties> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${org.springframework.security.version}</version> </dependency>请注意,我们使用的 Spring Security版本号号为 3.2.x.RELEASE —— 而 Spring 和Spring Security的公布计划和版本号号并不一致 ,所以也就没有一一相应的版本号号关系.

假设您正在使用旧版本号的Spring —— 也须要了解这个非常不直观的事实, Spring Security 3.1.x也不依赖于Spring 3.1.x版本号! 这是由于 Spring Security 3.1.x 在 Spring 3.1之前公布. Spring计划在以后的版本号中将这些依赖关系尽量保持一致,想要了解很多其它信息能够參考 他们的JIRA计划 ,但眼下肯定是不一致的,以下我们将看到详细的情况.

2.2. spring-security-web 要为 Spring Security 加入 Web 支持,须要加入 spring-security-web 依赖: <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${org.springframework.security.version}</version> </dependency>

它包括了在Servlet环境中进行URL訪问控制所需的过滤器(filter)及web相关的安全基础类.

2.3. Spring Security 和老版本号 Spring Core 的依赖问题  这个新的依赖也显示了 Maven依赖图的一个问题 —— 如前所述,Spring Security 的jar包依赖的不是最新的Spring core jar包(而是先前版本号的). 这可能会导致出如今 classpath 中的是 旧版本号的依赖,而屏蔽了新版本号的 Spring 4.x 项目(artifacts). 要理解为什么会发生这样的问题,我们须要看看 Maven是怎样解决冲突的 —— 假设发生版本号冲突,Maven将优先选择离依赖树的根(the root of the tree)近期的jar包. 在我们的样例中, spring-core 被两个地方依赖: spring-orm ( 4.x.release 版本号)和 spring-security-core (依赖老的 3.2.8.RELEASE 版),所以在这两个地方, 在我们的项目中 spring-jdbc 距离 root pom 的深度为1. 因此,在我们的pom文件里 spring-orm 和 spring-security-core 定义的顺序将起决定作用 - 谁先出现谁就具有优先权, 因此我们终于可能得到的jar包版本号并不确定. 要解决问题,我们必须明白定义一些Spring的依赖项,而不是使用Maven 的隐式依赖解决机制 —— 我们自定义以后能够将特定的依赖置于pom中深度为0的层级,保证优先级. 以下的部分须要置于同一个文件夹下,而且都须要明白定义,假设在多模块项目中,须要置于parent项目的 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 和其它jar包

要使用丰富的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>由于没有哪个应用在编译时须要依赖这个jar包,所以它的作用域( scope)应该设置为 runtime . 最后,LDAP, ACL, CAS 和 OpenID支持对 Spring Security有自己的依赖关系: spring-security-ldap , spring-security-acl , spring-security-cas 和 spring-security-openid . 3. 使用 Snapshots 和 Milestones 版本号 Spring Security的 Milestones(里程碑,M1,M2..) 和 Snapshots版 在Spring自己的Maven仓库中提供 —— 关于怎样配置的细节,请查看 怎样使用Snapshots和Milestones版. 4. 总结

本文讨论了使用 Maven集成 Spring Security 实际的细节 . Maven依赖的介绍当然是最基本的部分,此外还有几个值得一提的技术点和还须要等待的地方. 只是这也算是使用Maven管理Spring项目的一个非常好的起点.

转载于:https://www.cnblogs.com/bhlsheji/p/5111017.html

相关资源:数据结构—成绩单生成器
最新回复(0)