简介
Spring Security是一个提供身份验证、授权和针对常见攻击的保护的框架。它对命令式应用程序和响应式应用程序都提供了一流的支持,是保护基于spring的应用程序的事实上的标准。
Spring Security是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring Security的真正强大之处在于它可以很容易地扩展以满足定制需求。
先决条件
本文采用Spring Security 5.5.2
GA版本,需要Java 8或更高版本的运行时环境。
版本编号
Spring Security 版本格式为 MAJOR
.MINOR
.PATCH
:
MAJOR
主版本号,可能包含破坏的更改。通常,这样做是为了提供改进的安全性,以匹配现代安全性实践。MINOR
次要版本号,包含增强,但被认为是被动更新。PATCH
补丁版本号,应该是完全兼容的,向前和向后的,除了修复bug的更改。
使用Maven
Spring Boot 引导
在pom文件添加如下依赖即可
如示例 1:
<dependencies>
<!-- ... 依赖元素 ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
Spring Boot提供了Maven BOM来管理版本依赖项,所以不需要指定版本。如果想覆盖Spring Security版本,可以通过提供一个Maven属性来实现,如下例所示:
<properties>
<!-- 使用指定版本的Spring Security -->
<spring-security.version>5.5.2</spring-security.version>
</dependencies>
由于Spring Security只在主要版本中进行重大更改,所以使用Spring Boot的更新版本是安全的。然而,有时可能还需要更新Spring Framework的版本。可以通过添加一个Maven属性来实现,如下例所示:
<properties>
<!-- 更新Spring Framework版本 -->
<spring.version>5.3.9</spring.version>
</dependencies>
如果使用其他特性(如LDAP、OpenID等),还需要包含适当的项目模块和依赖项。
非Spring Boot 引导
在没有使用Spring Boot框架的情况下使用Spring Security时,首选的方法是使用Spring Security的BOM,以确保在整个项目中使用一致版本的Spring Security。下面的例子展示了如何做到这一点:
<dependencyManagement>
<dependencies>
<!-- ... 使用Spring Security BOM ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
<version>${spring-security-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
最小的Spring Security Maven依赖项集通常如下所示:
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
</dependencies>
Spring Security是在Spring Framework 5.3.9上构建的,但一般情况下应该可以使用Spring Framework 5.x的任何更新版本。如果使用其他版本的Spring Framework可能会遇到Spring Security的传递依赖解析Spring Framework 报错,这可能会导致奇怪的类路径问题。解决这个问题的最简单的方法是在<dependencyManagement>
标签中使用spring-framework-bom
指定版本号,确保Spring Security的所有传递依赖项都使用Spring 5.3.9模块。如下示例:
<dependencyManagement>
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.3.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
此方法使用Maven的“物料清单”(BOM)概念,仅在Maven 2.0.9+中可用。
所有GA版本(即以. release结尾的版本)都部署到Maven Central,因此不需要在pom中声明额外的Maven存储库。
如果使用SNAPSHOT版本,则需要确保定义了Spring SNAPSHOT存储库,如下例所示:
<repositories>
<!-- ... 可能是其他存储库元素 ... -->
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>