Spring Security与Maven教程

1.简介

在这篇文章中,我们将演示如何针对非常特定的用例将Maven依赖项用于Spring Security。 我们使用的所有库的最新版本都可以在Maven Central上找到。

在项目中,了解Maven依赖项的工作方式和管理方式对于有效的构建周期非常重要,并且对于我们在项目中使用的各种库之间的版本之间应有清晰的定义,这很重要。 这是由于我们经常在多个项目中重复一组依赖项的原因,并且当我们不了解为什么要使用特定的库版本时,我们应该犯错。 让我们了解一下Spring Security和Spring Framework依赖关系之间的关系。

2.使用Maven的Spring Security

在本节中,我们将介绍管理Maven依赖关系的特定用例。 这是由于Spring Security涉及许多功能,而不是您可能想要集成到应用程序中的每个功能都不需要所有依赖项的原因。 这些功能包括(但不限于):

  • 通过Spring Security保护注册过程
  • 密码加密,以便即使有人可以访问数据库也可以保护密码
  • 管理用户角色和权限,以便每个用户都有可以在应用程序中执行的特定操作
  • 从应用程序中的Spring Security检索用户信息以及分配给用户的角色和特权
  • 受保护的RESTful API,因此访问受到限制

2.1 spring-security-web

Spring Security Web依赖项用于提供与应用程序的Web安全相关的功能,例如:

  • 在Servlet容器环境中对URL的访问受到限制
  • 管理与Web相关的Spring Secuirty过滤器

要在Spring Security中添加Web支持,以下是所需的依赖项:

Spring安全网

<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-web</artifactId><version>${org.springframework.security.version}</version>
</dependency>

请注意,我们还定义了用作Maven属性的Spring框架和Spring Security的版本,并在我们针对这些模块提到的所有依赖关系中重复使用了该版本。

需要注意的要点是,Spring Framework和Spring Security遵循的时间表不同,因此版本号并不完全匹配 。 注意这一点很重要,因为例如,由于Spring Security 3.1.x是在Spring 3.1之前发行的,因此Spring Security 3.1.x不依赖于Spring 3.1.x发行版。

最后,要了解添加此依赖项时添加到项目中的所有JAR,我们可以运行一个简单的Maven命令,当我们向其添加一些依赖项时,该命令使我们能够查看项目的完整依赖关系树。 这是我们可以使用的命令:

检查依赖树

mvn dependency:tree

当我们运行此命令时,它将向我们显示以下依赖关系树:

添加了Web安全依赖性的依赖性树

如上图所示, spring-security-web JAR还带来了其他一些依赖性,例如spring-aopspring-beansspring-contextspring-corespring-expressionspring-web 。 当我们运行上面的命令时,在向我们展示依赖树之前,maven首先再次下载了JAR,以确认是否已更改。

最后,请注意,如果其中一个依赖项需要另一个依赖项才能运行,则该依赖项也已下载并在上面的依赖关系树中显示为该树的子分支。 当某种依赖关系将另一个依赖项带入构建系统的依赖项池时,间接依赖项的子分支表示方法将被清除。

2.2 spring-security-core

现在,让我们看一下Spring Security实现所需的核心依赖项:

Spring安全核心

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>${org.springframework.security.version}</version>
</dependency>

有了Spring Security Core依赖关系,我们就可以使用以下功能:

  • 访问控制
  • 方法级安全
  • 也支持非Web应用程序

这是Spring Security Maven依赖项家族中最常用的依赖项之一。 现在让我们看一下spring-security-core JAR的依赖关系树:

Spring Security核心依赖树

2.3 spring-security-config

如果您对与Spring Security相关的benas使用XML名称空间定义,则在应用程序中需要spring-security-config Maven依赖项。

弹簧安全配置

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${org.springframework.security.version}</version><scope>runtime</scope>
</dependency>

由于此依赖项仅在XML名称空间定义中使用,因此使用运行时范围来定义它。 请注意,其他配置功能(例如ACL,CAS,OpenID和LDAP)具有其自己的依赖性,例如: spring-security-aclspring-security-casspring-security-openidspring-security-ldap 。 即使依赖项具有运行时范围,但是仍然会下载其依赖项,让我们在这里查看其依赖项树:

Spring Security配置依赖树

2.4较旧的Spring Security依赖关系存在的问题

Spring Security JAR引起的一个主要问题是,并不是所有的Spring Security JAR都依赖于最新版本的Spring Framework相关依赖关系,但实际上它们需要较旧版本的依赖关系。 这就是为什么我们需要显式定义这些JAR,以便Maven在开始收集依赖项并针对它们进行编译时不会报告版本冲突。 这是必需的依赖项:

显式依赖

<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>

这样,当我们在自己的pom.xml文件中显式定义一些Spring依赖项时,我们将该依赖项置于0深度,因此,它将优先使用提到的版本,而不是Spring框架依赖项树中的隐式依赖项。 让我们看一下此处的依赖树以清除此问题:

添加特定JAR时的依赖树

当我们在此处查看依赖关系树时,我们看到由于在pom.xml文件中明确提及而添加到项目中的JAR的确切版本。

在此处阅读有关解决Maven中的依赖冲突的更多信息。

3. Spring Security中的快照和里程碑

Spring Security提供了Snapshot和Milestone版本,这些版本存在于Spring提供的自定义Maven存储库中。 阅读本课程,以了解如何在您的应用程序中使用这些发行版。

Release构件和Snapshot构件之间的主要区别在于Release构件是特定的和预先计划的发行版,它们是在预定的时间点制作的,被认为是稳定,稳定和永久的,以确保构建依赖于随着时间的推移,它们是可重复的。 Central Maven存储库存储发行工件。

快照可以捕获仍在进行中并在开发过程中使用的项目。 快照构件包含两个部分:版本号(例如“ 1.3.0”或“ 1.3”)和时间戳。 例如,用于spring-framework 1.3.0的快照工件可能具有名称spring-framework-1.3.0-20180323.19283-3.jar。

4。结论

在本课程中,我们讨论了带有Spring Security的各种Maven依赖关系以及初学者在开始使用Spring Security功能时通常会遇到的一些主要问题。 本课是了解所需依赖项的很好的起点。

我们还解释了在将Spring Security与Spring Framework结合使用时,指定某些特定JAR的版本有多么重要,以及我们如何不能依赖Spring Framework为这些JAR选择的依赖版本。 通过指定特定的依赖关系,我们要做的就是确保Maven选择这些显式的版本规范,而不是Spring Framework的依赖版本,以免发生版本冲突。

最后,我们学习了如何使用简单的maven命令显示项目的依赖关系树,并观察项目的哪些依赖关系还取决于其他哪些依赖关系。

在此处阅读有关Spring Framework的更多课程。

5.下载源代码

这是一个示例,显示了如何在项目中使用基于Spring Security的不同依赖关系。

下载
您可以在此处下载此示例的完整源代码: SpringSecurityMaven

翻译自: https://www.javacodegeeks.com/2018/03/spring-security-with-maven-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Verilog HDL实现序列检测器,附上仿真程序。

文章目录一、序列检测器二、状态转移图三、序列检测器Verilog HDL程序1、源程序2、测试平台程序四、仿真结果五、总结一、序列检测器 序列检测器的逻辑功能就是将一个指定的比特序列从一串较长的比特流中识别出来。 例如&#xff1a;针对一个较长的比特流01001001001111010101…

在Java中使用Google的协议缓冲区

最近发布了 有效的Java第三版 &#xff0c;我一直对确定此类Java开发书籍的更新感兴趣&#xff0c;该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中&#xff0c;显然有与Java 7 &#xff0c; Java 8和Java 9密切相关的全新项目&#xff0c;例如第7章&#xff08;“ Lamb…

不同阶QAM调制星座图中,符号能量的归一化计算原理

文章目录前言一、归一化能量计算原理二、Matlab中如何得到归一化能量符号总结前言 在基于QAM调制的matlab仿真程序中&#xff0c;我们通常会产生二进制比特流&#xff0c;并最终映射成QAM符号&#xff0c;该符号大都是格雷编码的。在坐标系中&#xff0c;相邻符号之间的横纵坐…

4qam、16qam、64qam、256qam理论仿真曲线

本博文给出了4qam、16qam、64qam、256qam理论仿真曲线&#xff0c;画出了EbN0 vs BER的曲线图&#xff0c;可以作为大家学习的一个参考。 仿真结果: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Theoretical ber curves of different orde…

建立时间、保持时间与亚稳态

文章目录一、建立时间与保持时间二、亚稳态现象总结一、建立时间与保持时间 建立时间&#xff08;set up time&#xff09;是指在触发器的时钟信号上升沿到来以前&#xff0c;数据从不稳定到稳定所需要的时间&#xff0c;一般用TsuT_{su}Tsu​表示。 保持时间是指在触发器的时…

java ee空指针_Java EE 7是最终版本。 思想,见解和进一步的指针。

java ee空指针我们花了不到三年的时间才推出了下一个Java EE版本 。 今年4月16日&#xff0c; JCP EC对JSR 342进行了投票并获得批准。 这是一个成功的故事&#xff0c;因为在去年八月下旬的最后时刻撤消了拥有云就绪平台的最初想法。 作为EG的成员&#xff0c;撰写即将发布的功…

Java可能使用UTF-8作为其默认字符集

由于基于Java的应用程序通常用于各种各样的操作系统和环境中&#xff0c;因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖&#xff1a;默认语言环境&#xff0c;默认字符集和默认时区》 &#xff1b; 注释JDK默认数据 …

2020-08-07 光纤通信第二章知识点整理

目录 2.1 半导体激光器 2 2.1.1 激光原理的基础知识 2 2.1.2 激光激射条件 3 2.1.3 结构理论 4 2.1.4 典型分类 6 2.1.5 模式概念 7 2&#xff0e;1.6 基本性质 8 2.2 半导体发光二极管 10 2.2.1 工作原理 10 2.2.2 结构和分类 10 2.2.3 主要性质 10 2.3 光源的直接调制 11 2.3…

静态分析的教育方面

加入我们项目的新程序员经常会问我们是否具有自动格式化工具&#xff0c;以使Java代码看起来完全符合Qulice的期望。 &#xff08;Quili是我们使用的静态分析器。&#xff09;我总是回答说&#xff0c;拥有这样一个自动代码抛光器只会有害&#xff0c;不会帮助项目及其成员改进…

2020-08-14 光纤通信第三章知识点整理

目录 3.1 光接收机 2 3.1.1 光接收机的分类与性能指标 2 3.1.2 直接检测光接收机的构成及功能 2 3.2 光电检测器 3 3.2.1 PN结的光电效应 4 3.2.2 PIN光电二极管 4 3.2.3 雪崩光电二极管&#xff08;APD&#xff09; 6 3.3 放大电路及其噪声 7 3.3.1 噪声的数学处理 8 3.3.2 放…

2020-08-21 光纤通信第四章知识点整理

第四章 光纤通信系统 目录 4.1 模拟光纤通信 2 4.2 数字光纤通信系统和总体设计 3 4.2.1 数字光纤通信系统基本组成 3 4.2.2 数字光纤通信系统总体设计 4 4.3 数字光纤传输系统的性能指标 7 4.3.1 误码性能 7 4.3.2 抖动、漂移性能 8 4.3.3 可用性 8 4.4 光纤放大器及其在光纤通…

2020-08-24 光纤通信第五章知识点整理

第五章 无源光器件和WDM技术 目录 5.1 无源器件的几个常用性能参数 1 5.2 光纤和波导型无源光器件 2 5.2.1 光连接器和光耦合器 2 5.2.2 偏振控制器 3 5.2.3 光纤布拉格光栅 4 5.2.4 Mach-Zahnder滤波器 5 5.2.5 非线性环路镜 5 5.3 光学无源器件 6 5.3.1 偏振分束器 6 5.3.2 光…

使用Java 9向Javadoc搜索添加术语

有一个相对较旧的网页&#xff0c;称为“ Proposed Javadoc Tags ”&#xff0c;最初似乎是与Javadoc 1.2一起编写的&#xff0c;其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category &#xff0c; example &#xff0c; tutorial &#xff0…

Java语言学习概述

md:创建新的文件夹 上面这行作用&#xff1a;将name&#xff1a;Tom,age12写入到文件1.doc中&#xff0c;也就是说先建个文档&#xff0c;再把这句话写进去。 del *.txt 作用&#xff1a;删除以txt结尾的所有文件 rd team2 作用&#xff1a;删除team2文件夹&#xff08;且这…

小狐狸ChatGPT付费创作系统 前端对话提示undefined index:temperature解决方法

很多会员使用着ChatGPT付费创作系统&#xff0c;特别是新安装系统后前端输入对话时提示错误undefined index:temperature&#xff0c;检查了反代、检查了KEY均正常&#xff0c;这问题主要是因为后台设置里新用户免费送对话次数为空&#xff0c;没设置赠送次数原因&#xff0c;导…

第二章 Java基本语法(一)

本文主要内容&#xff1a; 关键字、标识符、变量、类型转换、进制转换、运算符 一、关键字 二、标识符 比如&#xff1a;类名&#xff0c;变量名&#xff0c;方法名&#xff0c;接口名&#xff0c;包名。。。 小技巧&#xff1a;直接在我的电脑输入cmd&#xff0c;就可以打开…

第二章 Java基本语法(二)

本文主要内容&#xff1a; 运算符、if-else、switch-case 一、位运算符 运算符之五&#xff1a;位运算符 每左移一位&#xff0c;相当于是在原来的基础上乘2. int i 21; System.out.println(“i<<2:”(i<<2)); 输出&#xff1a;i<<2:84 结论&#xff1a; …

第二章 Java基本语法(三)

本文主要内容&#xff1a; 循环结构、特殊关键字break和continue的使用&#xff0c;质数问题的优化 循环结构&#xff1a;Boolean类型 程序编写&#xff1a; 从键盘输入两个正整数m和n&#xff0c;找出他们的最大公约数和最小公倍数。 import java.util.Scanner; public clas…

Matlab入门(一)

MATLAB学习笔记 本系列主要内容来源&#xff1a;matlab官方付费课程的学习笔记 截图较多&#xff0c;之后更新会尽量增加文字说明 matlab简单常用的命令 数组 round:四舍五入函数。

MATLAB入门(二)

可以使用 plot 函数在一张图上绘制两个相同长度的向量。 plot(x,y)plot 函数接受一个附加参数。使用该参数&#xff0c;您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。 plot(x,y,"r--o")以上命令将会绘制一条红色 虚线 (–)&#x…