
[TOC]
## 一、 SpringSecurity 框架簡介
官網:https://projects.spring.io/spring-security/
源代碼: [https://github.com/spring-projects/spring-security/](https://github.com/spring-projects/spring-security/)
Spring Security 是強大的,且容易定制的,基于Spring開發的實現認證登錄與資源授權的應用安全框架。
**SpringSecurity 的核心功能:**
* Authentication:身份認證,用戶登陸的驗證(解決你是誰的問題)
* Authorization:訪問授權,授權系統資源的訪問權限(解決你能干什么的問題)
* 安全防護,防止跨站請求,session 攻擊等
## 二、比較一下shiro與Spring Security
目前在java web應用安全框架中,與Spring Security形成直接競爭的就是shiro,二者在核心功能上幾乎差不多,但從使用的角度各有優缺點。筆者認為:沒有最好的,只有最合適的。
### 2.1 用戶量
Shiro的使用量一直高于spring security。但是從趨勢上來看(2020年10月的百度指數),Spring Security是在一直上升的,shiro的使用量同比、環比都進入了下滑期。

### 2.2.使用的方便程度
通常來說,shiro入門更加容易,使用起來也非常簡單,這也是造成shiro的使用量一直高于Spring Security的主要原因。但是從筆者的角度來看,二者其實都簡單,我說說我的理由:
* 在沒有Spring Boot之前,Spring Security的大部分配置要通過XML實現,配置還是還是非常復雜的。但是有了 Spring Boot之后,這一情況已經得到顯著改善。
* Spring Security之所以看上去比shiro更復雜,其實是因為它引入了一些不常用的概念與規則。大家應該都知道2/8法則,這在Spring Security里面體現的特別明顯,如果你只學Spring Security最重要的那20%,這20%的復雜度和shiro基本是一致的。也就是說,不重要的那80%,恰恰是Spring Security比shiro的“復雜度”。
也就是說,如果有人能幫你把Spring Security最重要的那20%摘出來,二者的入門門檻、復雜度其實是差不太多的。
### 2.3.社區支持
Spring Security依托于Spring龐大的社區支持,這點自不必多說。shiro屬于apache社區,因為它的廣泛使用,文檔也非常的全面。二者從社區支持來看,幾乎不相上下。
但是從社區發展的角度看,Spring Security明顯更占優勢,隨著Spring Cloud、Spring Boot、Spring Social的長足進步,這種優勢會越來越大。因為Spring Security畢竟是Spring的親兒子,Spring Security未來在于Spring系列框架集成的時候一定會有更好的融合性,前瞻性、兼容性!這也是為什么我們要學Spring Security的主要原因!
### 2.4.功能豐富性
Spring Security因為它的復雜,所以從功能的豐富性的角度更勝一籌。其中比較典型的如:
* Spring Security默認含有對OAuth2.0的支持,與Spring Social一起使用完成社交媒體登錄也比較方便。shiro在這方面只能靠自己寫代碼實現。
* 還有一種普遍說法:Spring Security在網絡安全的方面下的功夫更多,但是筆者并未有非常直接的感受,有可能出現安全問題的時候才會感到不夠安全的痛。
## 三、總結
如果你只是想實現一個簡單的web應用,shiro更加的輕量級,學習成本也更低。如果您正在開發一個分布式的、微服務的、或者與Spring Cloud系列框架深度集成的項目,筆者還是建議您使用Spring Security。
- 課程內容介紹
- 源碼與技術交流
- 作者其他作品推薦
- vue深入淺出系列
- 手摸手教你學Spring Boot
- 實戰前后端分離RBAC權限管理系統
- 實戰SpringCloud微服務從青銅到王者
- 第一章 spring security基礎篇
- 1.1.spring-security簡介并與shiro對比
- 1.2.需求分析與基礎環境準備
- 1.3.HttpBasic模式登錄認證
- 1.4.PasswordEncoder介紹
- 1.5.formLogin模式登錄認證
- 1.6.源碼解析登錄驗證流程
- 1.7.自定義登錄驗證結果處理
- 1.8.session會話的管理
- 1.9.同賬號多端登錄踢下線
- 第二章 認證授權鑒權功能深入
- 2.1.1.RBAC權限管理模型
- 2.1.2.結合真實系統講解RBAC實現
- 2.2.動態加載用戶角色權限數據
- 2.3.動態加載資源鑒權規則
- 2.4.權限表達式使用方法總結
- 2.5.RememberMe記住我功能
- 2.6.退出登錄功能的實現
- 2.7.多次登錄失敗賬戶鎖定
- 2.8.多種圖片驗證碼實現方案
- 2.9.基于session的圖片驗證碼實現
- 2.10.短信驗證碼登錄功能
- 第三章 集群單點登錄方案介紹
- 3.1.單點登錄與狀態共享方案
- 3.2.基于session共享登陸方案
- 3.3.CAS認證服務器搭建
- 3.4.CAS動態加載用戶密碼數據
- 3.5.CAS資源服務器搭建
- 第四章 前后端分離的應用認證
- 4.1.詳述JWT使用場景及結構安全
- 4.2.Spring Security-JWT實現原理
- 4.3.編碼實現JWT認證鑒權
- 4.4.解決跨域訪問的問題
- 4.5.CSRF跨站攻擊防護
- 4.6.JWT集群應用方案
- 第五章 Spring-Security-OAuth2項目
- 5.1.OAuth2授權標準簡介
- 5.2.Spring與OAuth2發展路線圖
- 5.3.實現授權碼模式認證服務器
- 5.4.實現其它三種模式認證服務器
- 5.5.AccessToken令牌的刷新
- 5.6.編碼實現資源服務器
- 5.7.認證資源服務器分離
- 5.8.認證資源服務整合JWT
- 5.9.Client信息持久化存儲
- 第六章 SpringSocial社交登錄
- 6.1.SpringSocia源碼分析
- 6.2.QQ互聯注冊及應用創建
- 6.3.實現QQ登錄功能
- 6.4.QQ登錄功能細節處理
- 6.5.QQ登錄用戶關系綁定
- 附錄一:抽取公共資源為獨立模塊
- 附錄二:OAuth-server數據庫表