[譯] 學習 Spring Security(一):Maven

www.baeldung.com/spring-secu…web

做者:Eugen Paraschivspring

轉載自公衆號:stackgcexpress

一、概述

本文將介紹如何使用 Maven 配置 Spring Security 和介紹使用 Spring Security 依賴的具體用例。最新的 Spring Security 版本能夠在 Maven Central 上獲取。安全

二、Spring Security 與 Maven

2.一、spring-security-core

Spring Security 核心支持(spring-security-core)包含身份驗證和訪問控制功能,並支持獨立(非 Web)應用、方法級安全策略和 JDBC 整合:maven

<properties>
    <org.springframework.security.version>3.2.3.RELEASE</org.springframework.security.version>
    <org.springframework.version>4.0.4.RELEASE</org.springframework.version>
</properties>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>${org.springframework.security.version}</version>
</dependency>
複製代碼

請注意,咱們使用了 Spring Security 的 3.2.x.RELEASE 版本 —— Spring 和 Spring Security 的發行時間不一樣,所以他們的版本號不存在對應關係。spa

若是你使用的是舊版本的 Spring,那麼很是重要的一點就是:Spring Security 3.1.x 不依賴於 Spring 3.1.x 發行版!這是由於 Spring Security 3.1.x 早於 Spring 3.1 發佈。將來這些依賴的版本號將逐漸靠攏 —— 有關更多詳細信息,請參閱此 JIRA — 但在目前看來,這仍是有實際意義的,咱們將在下面討論。code

2.二、spring-security-web

要爲 Spring Security 添加 Web 支持,須要添加 spring-security-web 依賴:orm

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

以上包含了過濾器和相關的 Web 安全基礎設施,可在 Servlet 環境中啓用 URL 訪問控制。xml

2.三、Spring Security 與較早的 Spring Core 依賴問題

這個新依賴跟 Maven 依賴圖存在一個問題 —— 如上所述,Spring Security jar 不依賴於最新的 Spring core jar(但以前的版本不是這樣)。這可能會致使較舊的依賴被使用,而不是較新的 4.x Spring 工件(artifact)。作用域

爲了瞭解爲何會發生這種狀況,咱們須要看看 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 是怎樣使用順序呢 —— 優先考慮第一個,所以咱們可能會在 classpath 中使用任一版本。

爲了解決這個問題,咱們在 pom 中必須明肯定義一些 Spring 依賴,而不是依賴於隱式的 Maven 依賴解析機制 —— 這樣作會使咱們 pom 中的特定依賴深度爲 0 (由於它自己定義在 pom 中),所以它會優先被考慮。如下全部都屬於同一類別,都須要明肯定義,對於多模塊項目,須要在父級的 dependencyManagement 元素中定義:

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

2.四、spring-security-config 等

要想使用 Spring Security XML 命名空間,須要添加 spring-security-config 依賴:

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

沒有應用代碼須要用到該依賴進行編譯,所以它應該設置爲 runtime 做用域。

LDAP、ACL、CAS 和 OpenID 也有 Spring Security 的相關依賴:spring-security-ldap、spring-security-acl、spring-security-cas 和 spring-security-openid。

三、使用 Snapshots 和 Milestones

Spring 在自定義 Maven 倉庫中提供了 Spring Security milestones(里程碑版本) 和 snapshots(快照版本),有關配置的更多詳細信息,請參閱如何使用 milestones 和 snapshots

四、結論

本文討論了使用 Spring Security 與 Maven 的相關細節。這裏提到的 Maven 依賴只是一些重要的經常使用依賴。但這也爲你在 Maven 項目中使用 Spring 提供了很好的參考點。

文中相關連接

相關文章
相關標籤/搜索