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

原文链接: 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与Maven

2.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项目的一个很好的起点.


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值