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链接。
原文链接: 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项目的一个很好的起点.


目录
相关文章
|
9月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
1716 5
|
6月前
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
209 0
|
5月前
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
322 28
|
6月前
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
249 0
|
8月前
|
缓存 架构师 Java
Maven实战进阶(01)面试官:Maven怎么解决依赖冲突?| 有几种解决方式
本文介绍了Maven的核心功能和依赖管理技巧。Maven是基于项目对象模型(POM)的构建工具,具备跨平台、标准化、自动化等特性。其三大核心功能为依赖管理、仓库管理和项目构建。依赖管理通过pom.xml文件引入第三方组件并自动下载;仓库管理涉及中央仓库、私服和本地仓库;项目构建则通过生命周期管理编译、测试、打包等流程。文章还详细讲解了依赖冲突的解决方法,包括默认规则、手工排除和版本指定等策略。
|
9月前
|
缓存 Java Maven
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法!在处理Maven项目问题时,首先检查Maven配置是否正确。接着通过“File--Invalidata Caches”清除IDEA缓存并重启。使用Maven命令`mvn dependency:purge-local-repository`和`mvn dependency:resolve`清除本地依赖缓存。最后,在Terminal中输入`mvn clean install`完成构建。
2649 1
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
|
9月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
204 2
|
11月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
857 1
Maven——创建 Spring Boot项目
|
10月前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
219 10
|
11月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
284 1
如何使用 maven 创建一个 Spring Boot项目

推荐镜像

更多