Spring Security 概述

小小码农 2021年10月14日 960次浏览

简介

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>