知識庫 / Maven RSS 訂閱

Spring Security 與 Maven

Maven,Spring Security
HongKong
8
03:12 PM · Dec 06 ,2025

1. 概述

本文將介紹如何設置 Spring Security 與 Maven 的集成,並探討使用 Spring Security 依賴項的特定用例。您可以在 Maven Central 上找到最新的 Spring Security 版本。

這篇內容是之前關於 Spring 和 Maven 的文章的後續內容,因此對於非 Spring Security 依賴項,這裏是您應該開始的地方。

2. 使用 Maven 進行 Spring Security 集成

<p>This section explains how to integrate Spring Security with Maven.  It covers the necessary steps to add Spring Security as a dependency and configure your project for security.</p>

<p><b>Prerequisites:</b></p>
<ul>
  <li>A working Maven project.</li>
  <li>Maven installed and configured correctly.</li>
</ul>

<p><b>Steps:</b></p>
<ol>
  <li><b>Add Spring Security Dependency:</b>  Add the Spring Security dependency to your project's <code>pom.xml</code> file.  The recommended version is the latest stable release.</li>
  <li><b>Configure Security Context:</b>  Configure the Spring Security context in your application's configuration class (e.g., <code>ApplicationConfig.java</code>).</li>
  <li><b>Configure Authentication and Authorization:</b>  Implement your authentication and authorization logic.</li>
</ol>

<p><b>Example pom.xml:</b></p>
<pre><code>
&lt;dependency&gt;
  &lt;groupId&gt;org.springframework.security&lt;/groupId&gt;
  &lt;artifactId&gt;spring-security-core&lt;/artifactId&gt;
  &lt;version&gt;5.7.8&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>

2.1. spring-security-core

該 Spring Security 核心支持 – spring-security-core – 包含身份驗證和訪問控制功能。對於所有使用 Spring Security 的項目,必須包含此依賴項。

此外,spring-security-core 支持獨立應用程序(非 Web 應用程序)、方法級別安全性和 JDBC:

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

請注意,Spring 和 Spring Security 採用不同的發佈計劃,因此版本號之間通常不會完全一一對應。

如果您正在使用較舊版本的 Spring – 務必理解的是,反直覺的是,Spring Security 4.1.x 不依賴 Spring 4.1.x 版本! 例如,當 Spring Security 4.1.0 發佈時,Spring 核心框架已經處於 4.2.x 版本,因此將其作為編譯依賴項包含在內。 未來的發佈計劃是更緊密地對這些依賴項進行對齊 – 參見 此 JIRA 以獲取更多詳細信息 – 但目前,這具有實際影響,我們將在稍後進行探討。


Spring Security 的 Web 支持,我們需要 spring-security-web 依賴項:

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

此內容包含過濾器以及相關的 Web 安全基礎設施,它在 Servlet 環境中啓用 URL 訪問控制。

2.3. Spring Security 與舊版 Spring Core 依賴衝突問題

該依賴項也存在對 Maven 依賴圖的潛在問題。 如前所述,Spring Security 罐不依賴於最新版本的 Spring Core 罐(而是依賴於舊版本)。 這可能導致這些舊版依賴項位於類路徑的頂部,而不是較新的 5.x Spring 構件之上。

為了理解為什麼會發生這種情況,我們需要了解 Maven 如何解決依賴衝突。 在存在版本衝突的情況下,Maven 會選擇距離根目錄最近的 jar 包。 例如,spring-core 既由 spring-orm (版本 5.0.0.RELEASE) 聲明,也由 spring-security-core (版本 5.0.2.RELEASE) 聲明。 因此,在兩種情況下,spring-jdbc 都從項目的根 pom 中深度為 1 定義。 因此,spring-ormspring-security-core 在我們自己的 pom 中定義的順序會很重要。 第一個版本將具有優先權,因此我們可能會在我們的類路徑上最終看到任何一種版本。

為了解決此問題,我們需要在我們的 pom 中明確定義一些 Spring 依賴項,而不是依賴於 Maven 的隱式依賴解析機制。 這樣做會將該特定依賴項從我們的 pom 中深度為 0 定義(因為它在 pom 中本身就定義了),因此它將具有優先權。 以下所有內容都屬於同一類別,並且都需要明確定義,要麼直接,要麼對於多模塊項目,則在父 pom 的 <em style="font-style: italic;">dependencyManagement</em> 元素中。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring-version}</version>
</dependency>

2.4. <em/>spring-security-config</em/>及其它

為了充分利用豐富的 Spring Security XML 命名空間和註解,我們需要添加 <em/>spring-security-config</em/> 依賴項:

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

最後,LDAP、ACL、CAS、OAuth 和 OpenID 支持有各自的依賴項,包括:spring-security-ldapspring-security-aclspring-security-casspring-security-oauthspring-security-openid

3. 使用 Spring Boot

當使用 Spring Boot 時,<a href="https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security">spring-boot-starter-security</a> starter 將會自動包含諸如 <em>spring-security-core</em>, <em>spring-security-web</em>, 和 <em>spring-security-config</em> 等所有依賴項:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

由於 Spring Boot 將自動管理所有依賴項,因此這也會解決之前提到的 Spring Security 和舊核心依賴項問題。

4. 使用快照和里程碑

Spring Security 的 快照,以及里程碑,都可在 Spring 提供的自定義 Maven 倉庫中找到。有關如何配置這些倉庫的詳細信息,請參閲“使用快照和里程碑”一節。

5. 結論

在本快速教程中,我們討論了使用 Spring Security 與 Maven 的實用細節。此處提供的 Maven 依賴項當然是其中一些主要依賴項,但還有其他一些依賴項可能值得提及,但尚未被納入其中。儘管如此,這仍然是一個良好的起點,用於在 Maven 支持的項目中使用 Spring。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.