獲取 Spring Security
本節介紹如何獲取 Spring Security 的二進位制檔案。有關如何獲取原始碼的資訊,請參見原始碼。
版本編號
Spring Security 版本號格式為 MAJOR.MINOR.PATCH,其中
-
MAJOR 版本可能包含重大變更。通常,這些變更旨在提供符合現代安全實踐的增強安全性。
-
MINOR 版本包含增強功能,但被認為是平緩更新。
-
PATCH 版本應完全向前和向後相容,但修復 Bug 的變更除外。
使用
與大多數開源專案一樣,Spring Security 將其依賴項釋出為 Maven Artifact,這使得它們與 Maven 和 Gradle 都相容。以下章節演示瞭如何將 Spring Security 與這些構建工具整合,並提供了 Spring Boot 和獨立使用的示例。
Spring Boot
Spring Boot 提供了 spring-boot-starter-security
啟動器,它聚合了與 Spring Security 相關的依賴項。使用該啟動器最簡單且首選的方式是使用 Spring Initializr,可以透過 IDE 整合(Eclipse 或 IntelliJ、NetBeans)或透過 start.spring.io 來使用。此外,您也可以手動新增啟動器,如下例所示
-
Maven
-
Gradle
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
dependencies {
implementation "org.springframework.boot:spring-boot-starter-security"
}
由於 Spring Boot 提供了 Maven BOM 來管理依賴版本,因此您無需指定版本。如果您希望覆蓋 Spring Security 版本,可以使用構建屬性來實現,如下所示
-
Maven
-
Gradle
<properties>
<!-- ... -->
<spring-security.version>6.4.5</spring-security.version>
</properties>
ext['spring-security.version']='6.4.5'
由於 Spring Security 僅在主要版本中引入重大變更,因此您可以安全地在 Spring Boot 中使用更新版本的 Spring Security。然而,有時您可能還需要更新 Spring Framework 的版本。您可以透過新增如下構建屬性來實現
-
Maven
-
Gradle
<properties>
<!-- ... -->
<spring.version>6.2.6</spring.version>
</properties>
ext['spring.version']='6.2.6'
如果您使用了附加功能(例如 LDAP、OAuth 2 等),您還需要包含相應的專案模組和依賴項。
獨立使用(不使用 Spring Boot)
當您在不使用 Spring Boot 的情況下使用 Spring Security 時,首選方法是使用 Spring Security 的 BOM,以確保整個專案中使用的 Spring Security 版本一致。
-
Maven
-
Gradle
<dependencyManagement>
<dependencies>
<!-- ... other dependency elements ... -->
<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>
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencyManagement {
imports {
mavenBom 'org.springframework.security:spring-security-bom:6.4.5'
}
}
Spring 為 Gradle 提供了一個依賴管理外掛 |
一個最小的 Spring Security Maven 依賴集通常如下例所示
-
Maven
-
Gradle
<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>
dependencies {
implementation "org.springframework.security:spring-security-web"
implementation "org.springframework.security:spring-security-config"
}
如果您使用了附加功能(例如 LDAP、OAuth 2 等),您還需要包含相應的專案模組和依賴項。
Spring Security 是基於 Spring Framework 6.2.6 構建的,但通常應與任何更新的 Spring Framework 5.x 版本相容。許多使用者可能會遇到 Spring Security 的傳遞依賴項解析到 Spring Framework 6.2.6 的問題,這可能導致奇怪的 classpath 問題。解決此問題的最簡單方法是在您的 pom.xml
的 <dependencyManagement>
部分或您的 build.gradle
的 dependencyManagement
部分中使用 spring-framework-bom
。
-
Maven
-
Gradle
<dependencyManagement>
<dependencies>
<!-- ... other dependency elements ... -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>6.2.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencyManagement {
imports {
mavenBom 'org.springframework:spring-framework-bom:6.2.6'
}
}
Spring 為 Gradle 提供了一個依賴管理外掛 |
前面的示例確保 Spring Security 的所有傳遞依賴項都使用 Spring 6.2.6 模組。
這種方法使用了 Maven 的“物料清單”(BOM)概念,僅在 Maven 2.0.9+ 版本中可用。有關依賴項如何解析的更多詳細資訊,請參閱Maven 的依賴機制介紹文件。 |
Maven 倉庫
所有GA 版本都已部署到 Maven Central,因此您無需在構建配置中宣告額外的 Maven 倉庫。
對於 Gradle,使用 mavenCentral()
倉庫足以滿足 GA 版本需求。
repositories {
mavenCentral()
}
如果您使用 SNAPSHOT 版本,您需要確保定義了 Spring Snapshot 倉庫
-
Maven
-
Gradle
<repositories>
<!-- ... possibly other repository elements ... -->
<repository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>https://repo.spring.io/snapshot</url>
</repository>
</repositories>
repositories {
maven { url 'https://repo.spring.io/snapshot' }
}
如果您使用里程碑或候選釋出版本,您需要確保定義了 Spring Milestone 倉庫,如下例所示
-
Maven
-
Gradle
<repositories>
<!-- ... possibly other repository elements ... -->
<repository>
<id>spring-milestone</id>
<name>Spring Milestone Repository</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
repositories {
maven { url 'https://repo.spring.io/milestone' }
}