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


目录
打赏
0
0
0
0
9
分享
相关文章
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
582 5
Maven实战进阶(01)面试官:Maven怎么解决依赖冲突?| 有几种解决方式
本文介绍了Maven的核心功能和依赖管理技巧。Maven是基于项目对象模型(POM)的构建工具,具备跨平台、标准化、自动化等特性。其三大核心功能为依赖管理、仓库管理和项目构建。依赖管理通过pom.xml文件引入第三方组件并自动下载;仓库管理涉及中央仓库、私服和本地仓库;项目构建则通过生命周期管理编译、测试、打包等流程。文章还详细讲解了依赖冲突的解决方法,包括默认规则、手工排除和版本指定等策略。
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
523 12
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法!在处理Maven项目问题时,首先检查Maven配置是否正确。接着通过“File--Invalidata Caches”清除IDEA缓存并重启。使用Maven命令`mvn dependency:purge-local-repository`和`mvn dependency:resolve`清除本地依赖缓存。最后,在Terminal中输入`mvn clean install`完成构建。
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
80 2
|
4月前
|
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
105 10
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
427 2
|
5月前
|
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
1091 3
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
307 0
idea+maven+tomcat+spring 创建一个jsp项目

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等