亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Spring Security 簡介

1. 前言

不難證明,外賣和我們的生活越來越緊密,我們也許天天都點外賣,那有沒有想過,為什么我們敢把自己的姓名、身份證、手機、銀行卡、家庭住址等等一系列敏感信息都放心地告訴給第三方平臺?這離不開一個詞「信任」。當我點了一單外賣,為什么飯店看得到我的訂單?為什么配送員可以找得到我家?為什么客服中心可以處理投訴?為什么財務人員可以劃撥?這里又出現了另一個詞「職責」。

所謂「信任」,就是我知道你是誰,我也相信你做的事;所謂「職責」,就是我們相互獨立又共同協作。在 IT 系統中,「信任」是通過「認證」來完成的,「職責」是通過「權限」來實現的,它們又被統稱為「應用安全」??梢?,「安全」是 IT 系統正常運營的必要條件之一。既然「安全」如此重要,那有沒有一套框架可以幫助 Spring Boot 開發者快速地、規范地、有效地構建自己 IT 系統的安全環境呢?當然有,那就是本次課程的主題:「Spring Security」安全框架。

2. Spring Security 簡介

2.1 Spring Security 的誕生

Spring Security 是 Spring 家族的中,提供認證、授權和攻擊防護功能的一套安全框架。Spring Security 支持命令式和響應式兩種開發模式,它也是 Spring 應用在安全框架方面的公認標準。

Spring Security 的前身是 Acegi security。Acegi security 在 1.0.7 版本之后便不再跟新,轉而以 Spring Security 2.0 的身份出現在 Spring 大家庭中。截止今日(2020 年 5 月 17 日),Spring Security 正式版本已經發展至 5.3,并且已經公布 5.4 的預覽版本。

2.2 Spring Security 和同類型框架的比較

Java 環境下有兩大安全框架:Spring Security 和 Shiro。

和 Spring Security 一樣,Shiro 同樣隸屬于一個強大的軟件社區: Apache。二者的功能類似,都完成了認證和鑒權功能,都有超過十年的發展歷史。Shiro 是一個獨立的安全框架,Spring Security 則與 Spring 關聯緊密,所以在二者的選擇上,可以簡單的用如下原則區分:

如果我們開發 Spring Boot 項目,那優先建議使用 Spring Security 安全框架。如果我們開發其他類型的項目,那請使用 Shiro 作為安全框架。

Spring Security 安全框架適合為 Spring Boot 項目提供安全保護,所以如果您是個 Spring Boot 項目的開發人員,且正在尋找一種可以和 Spring Boot 輕松集成的,用于認證和鑒權的框架時,可以優先考慮 Spring Security。

2.3 Spring Security 相關資源:

3. Spring Security 的特性

Spring Security 的核心特性包括:認證和授權、常規攻擊防范、與 Servlet 接口集成、與 Spring MVC 集成等。

認證和授權的目的是,讓系統知道使用者是誰(認證)?是什么樣的身份?允許他做什么?禁止他做什么?通常的做法是要求用戶輸入自己的用戶名和密碼,來實現登錄和鑒權的過程。

常規攻擊防范在 Spring Security 安全框架中是默認開啟的,常見的威脅抵御方式有:

  • 防止偽造跨站請求(CSRF)
  • 安全響應頭(HTTP Response headers)
  • HTTP 通訊安全

作為 Spring 大家族的一員,Spring Security 在與 Spring 引用,尤其是與 Spring boot 應用的結合時,顯得極為便利。

圖片描述

Spring Security 三大功能

3. 功能模塊

Spring Security 安全框架,內置一系列的安全子模塊,用來滿足不同類型的應用場景。自 3.0 版本開始,這些子模塊被分散到了不同的 Jar 包中,開發者可以更加清晰地、直接地選擇自己需要的模塊,簡單有效地完善自己的業務功能。

Spring Security 包含的功能模塊如下:

  • Core

    核心模塊,包含認證、訪問控制、集成支持、配置接口等,所有 Spring Security 項目都需要依賴它。

    對應的 Jar 文件:spring-security-core.jar。

  • Remoting

    Spring security 中的 Remoting 模塊提供了與 Spring Remoting 集成的能力。當我們要開發遠程客戶端的時候需要用到此模塊。

    對應的 Jar 文件:spring-security-remoting.jar。

  • Web

    Spring security 中的 Web 模塊,提供了接口過濾器和 Web 安全的基礎代碼。例如 Servlet 應用接口。如果我們開發的是基于 Web 認證的服務,或者是基于 URL 的訪問控制時,將需要用到此模塊。

    對應的 Jar 文件:spring-security-web.jar

  • Config

    Spring security 中的 Config 模塊,包含了安全框架命名空間的解析功能與提供了 Java 配置代碼。當我們需要使用 XML 方式或者 Java 配置方式時,需要用到此模塊。

    對應的 Jar 文件:spring-security-config.jar

  • LDAP

    Spring security 中的 Ldap 模塊,提供了對 Ldap 認證的支持,當我們使用 Ldap 認證時,需要用到此模塊。

    對應的 Jar 文件:spring-security-ldap.jar

  • OAuth 2.0 相關模塊

    Spring security 提供了對 OAuth 2.0 的支持,具體分為以下幾個模塊。

    • OAuth 2.0 Core

      OAuth 2.0 Core 模塊是 Spring security 安全框架中,對 OAuth 2.0 支持的核心模塊,包含了認證功能與 OpenID 的基本支持。

      對應的 Jar 文件:spring-security-oauth2-core.jar

    • OAuth 2.0 Client

      OAuth 2.0 Client 模塊是 OAuth 2.0 客戶端認證授權基礎,當我們需要在客戶端實現 OAuth 2.0 登錄功能時,需要添加此模塊。

      對應的 Jar 文件:spring-security-oauth2-client.jar

    • OAuth 2.0 JOSE

      OAuth 2.0 JOSE (Javascript Object Signing and Encryption)模塊,提供了基于 JS 對象的認證與加解密功能,核心目標是實現 JS 安全傳輸能力。主要功能有:JWT、 JWS、JWE、JWK。

      對應的 Jar 文件:spring-security-oauth2-jose.jar

    • OAuth 2.0 Resource Server

      OAuth 2.0 resource server 模塊,提供了 OAuth 2.0 資源服務的基本功能,也就是對資源的訪問控制。

      對應的 Jar 文件:spring-security-oauth2-resource-server.jar

  • ACL

    ACL 模塊提供了基于域對象的訪問控制。

    對應的 Jar 文件:spring-security-acl.jar

  • CAS

    CAS 模塊適用于需要使用 CAS 單點登錄的系統,可以用于單點登錄客戶端的集成。

    對應的 Jar 文件:spring-security-cas.jar

  • OpenID

    OpenID 模塊適用于需要集成外部 OpenID 的認證系統。使用該模塊功能同時還需要依賴 OpenID4Java 。

    對應的 Jar 文件:spring-security-openid.jar

  • Test

    Test 模塊提供了對 Spring security 進行單元測試的能力。

    對應的 Jar 文件:spring-security-test.jar

4. 開始前準備

Spring Security 要求使用 JDK 8 以上的 Java 編譯版本。

在 Spring Boot 項目中添加 Spring Security 支持非常方便,只需要使用 Spring Boot 提供的 spring-boot-starter-security 啟動器即可。

在非 Spring Boot 項目中使用 Spring Security 則需要添加 Spring Security 核心組件,如:spring-security-configspring-security-web 等。

5. 小結

Spring Security 是 Spring 家族中規范化的安全框架。它幫助我們輕松地構建應用安全環境,可以快速地實現「認證」和「權限」管理,它幫助我們規范化開發過程,是一套完整、成熟、易用的開發框架。

下一節,我們將嘗試創建第一個 Spring Security 應用。