使用Maven構建Spring Security應用


1.概述

本文將解釋如何使用Maven構建Spring Security應用程序。將討論使用Spring Security依賴項的特定用例。最新的Spring Security版本可以在Maven Central上找到。

這是前一篇Spring與Maven文章的后續內容,因此對於非安全性的Spring依賴項,這是開始的地方。

2. Maven與Spring Security

2.1. spring-security-core

Core Spring Security支持 - spring-security-core -包含身份驗證和訪問控制功能。並且支持獨立(非Web)應用程序,方法級安全性和JDBC:

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

請注意,Spring和Spring Security處於不同的發布計划中,因此版本號之間並不總是匹配1:1

如果你正在使用舊版本的Spring - 理解這一事實是非常重要的,幸運的是,Spring Security 3.1.x不依賴於Spring 3.1.x版本!這是因為Spring Security 3.1.x是在Spring 3.1之前發布的。計划是在將來的版本中更緊密地調整這些依賴關系。

2.2. spring-security-web

要為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 jar不依賴於最新的Spring核心jar(但在之前的版本上)。這可能會導致這些較舊的依賴項在類路徑上占據優勢,而不是更新的4.x Spring組件。

要理解為什么會這樣,我們需要看看Maven如何解決這些問題,如果版本沖突,Maven將選擇最接近樹根的jar。在我們的例子中,spring-core由spring-orm(使用4.x.RELEASE版本)定義,但也由spring-security-core(使用舊的3.2.8.RELEASE版本)定義,所以在這兩種情況下,spring-jdbc都是從我們項目的根pom定義的深度為1
,在我們自己的pom中定義spring-orm和spring-security-core的順序實際上很重要。
第一個將優先考慮,所以我們可能最終得到任何一個版本在我們的類路徑上

為了解決這個問題,我們必須在自己的pom中明確定義一些Spring依賴項,不依賴於隱式Maven依賴解析機制。這樣做會將特定的依賴性放在我們pom的深度0處(因為它是在pom本身中定義的)所以它將優先考慮。以下所有內容屬於同一類別,需要直接或為多模塊項目明確定義,在父級的dependencyManagement元素中。

<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. spring-security-config and others

要使用豐富的Spring Security XML命名空間,需要spring-security-config依賴關系:

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

沒有應用程序代碼應針對此依賴項進行編譯,因此應將其作runtime范圍。
最后,LDAP,ACL,CAS和OpenID支持在Spring Security中有自己的依賴關系。
spring-security-ldap, spring-security-acl, spring-security-cas and spring-security-openid.

3.使用快照和里程碑

Spring提供的自定義Maven存儲庫中提供了Spring Security里程碑和快照
有關如何配置這些內容的其他詳細信息,請參閱如何使用快照和里程碑

4。結論

本文討論了使用Spring Security與Maven的實際細節。這里介紹的Maven依賴項當然是一些主要的依賴項。還有其他幾個值得一提,但是這里做了刪減,不過,這應該是在啟用Maven的項目中使用Spring的一個很好的起點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM