2.4. 取得 Spring Security

2.4. 取得 Spring Security

有好幾種取得 Spring Security 的方式,可以從 Spring Security 的 Github 下載打包好的發行版本、可以從 Maven Central 直接下載 jar 檔,也可以取得原始碼自己建立專案。

2.4.1. 使用 Maven

一組最基本的 Spring Security Maven 組合通常會長這樣:

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.0.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.0.7.RELEASE</version>
    </dependency>
</dependencies>

如果有需要其他功能例如 LDAP、OpenID 等等,你會需要再加入 其他模組

Maven Repositories

所有正式發行的版本 (版本號後綴為 .RELEASE) 都會放上 Maven Central,所以不需要另外在 pom 檔宣告其他 Maven repositories。

但如果你使用的是 SNAPSHOT 版本,你就需要確保你有在 pom 檔有以下宣告:

<repositories>
    <repository>
        <id>spring-snapshot</id>
        <name>Spring Snapshot Repository</name>
        <url>http://repo.spring.io/snapshot</url>
    </repository>
</repositories>

如果你使用的是 milestone 或發行候選的版本,則需要以下宣告:

<repositories>
    <repository>
        <id>spring-milestone</id>
        <name>Spring Milestone Repository</name>
        <url>http://repo.spring.io/milestone</url>
    </repository>
</repositories>

Spring 框架 Bom

Spring Security 是建立在 Spring Framework 5.0.x.RELEASE,但使用 4.0.x 的版本應該也可以。

有些使用者會碰到 Spring Security 在解析對 Spring Framework 5.0.8.RELEASE 的 遞移依賴 (transitive dependencies) 的時候,會碰到奇怪的 classpath 問題。

遞移依賴 (transitive dependencies) 是 Maven 的機制,意思是只要定義好某項 dependency,Maven 就會自動去查看該 dependency 的 pom 檔,並將其中所有關聯的 dependency 一併下載回來

其中一個比較醜的解決辦法,就是將所有 Spring Framework 模組的依賴都加到 <dependencyManagement> 段落中。

另一個方法是將 spring-framework-bom 加到 <dependencyManagement> 段落中,如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.0.x.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
	</dependencies>
</dependencyManagement>

這樣就可以確保 Spring Security 所有的遞移依賴都使用 Spring 5.0.x.RELEASE 模組。

另外一個注意事項,就是使用 bom 的方法只適用於 Maven 2.0.9 以上的版本,其他我不想多說,自己參考 Maven 官網

2.4.2. Gradle

我沒有在用 Gradle,所以跳過。囧>

2.4.3. 專案模組

從 Spring Security 3.0 開始,程式碼就被分離成不同的 jar 檔,以便更清楚的區分功能區塊跟第三方依賴。

如果使用 Maven 來建立專案,那以下這些就是會加到你的 pom.xml 的模組;即使你不是用 Maven,我們都建議你看一下 pom 檔,這樣對於有用到那些第三方依賴跟版本會有些概念。

或者查看範例程式有包含哪些套件也是個好主意呀好主意~

核心 - spring-security-core.jar

包含核心的權限驗證及存取控制類別和介面、遠端支援及基本的設定 API,使用 Spring Security 必備。

支援獨立應用程式、遠端客戶端、方法 (服務層) 安全控制及 JDBC 使用者設定。

含有以下套件:

  • org.springframework.security.core
  • org.springframework.security.access
  • org.springframework.security.authentication
  • org.springframework.security.provisioning

遠端 - spring-security-remoting.jar

提供與 Spring Remoting 的整合,除非你在使用 Spring Remoting 開發遠端客戶端,否則你不需要這個部分。

主要的套件是 org.springframework.security.remoting

網路 - spring-security-web.jar

包含 filters 及有關的網路安全架構程式碼,都依賴於 servlet API。

如果你要使用 Spring Security 網路權限驗證服務及 URL 存取控制,就需要它。

主要的套件是 org.springframework.security.web

設定 - spring-security-config.jar

包含解析 security 命名空間及 Java 設定的程式碼。

如果你使用 Spring Security XML 命名空間或 Spring Security 支援的 Java 方式作設定,就會需要它。

主要套件是 org.springframework.security.config,但裡面所有類別都不應該在應用程式中直接使用。

LDAP - spring-security-ldap.jar

使用 LDAP 驗證必備。

最高階層套件為 org.springframework.security.ldap

OAuth 2.0 Core - spring-security-oauth2-core.jar

使用 OAuth 2.0 或 OpenId Connect Core 1.0 如作為 Client、Resource 或 Authorization Server 的應用程式,Spring Security提供對 OAuth 2.0 Authorization FrameworkOpenID Connect Core 1.0 支援的核心類別及介面。

最高階層套件為 org.springframework.security.oauth2.core

OAuth 2.0 Client - spring-security-oauth2-client.jar

當應用程式利用 OAuth 2.0 Login 或 OAuth Client support,Spring Security 提供對 OAuth 2.0 Authorization FrameworkOpenID Connect Core 1.0 客戶端的支援。

最高階層套件為 org.springframework.security.oauth2.client

OAuth 2.0 JOSE - spring-security-oauth2-jose.jar

JOSE (Javascript Object Signing and Encryption) 框架的目的是為了提供一種能夠在端點間安全的傳送內文 (claim) 的方法,由以下規格集合所組成:

  • JSON Web Token (JWT)
  • JSON Web Signature (JWS)
  • JSON Web Encryption (JWE)
  • JSON Web Key (JWK)

Spring Security 對 JOSE 框架提供的支援,有以下最高層級的套件:

  • org.springframework.security.oauth2.jwt
  • org.springframework.security.oauth2.jose

ACL - spring-security-acl.jar

沒在用先跳過。

CAS - spring-security-cas.jar

沒在用先跳過。

OpenID - spring-security-openid.jar

沒在用先跳過。

Test - spring-security-test.jar

提供在 Spring Security 架構下的測試。

2.4.4. 原始碼

Spring Security 是一個開源的專案,我們鼓勵用 git 下載原始碼,這樣你就可以對它想幹嘛就幹嘛 (無誤)

用以下的 git 命令就可以取得整個專案的原始碼:

git clone https://github.com/spring-projects/spring-security.git

醬就可以取得整個專案所有的版本跟分支惹 <3