一篇文章帶你認識 SpringSecurity
一、SpringSecurity 介紹
Java 領域老牌的許可權管理框架當屬 Shiro 了。
Shiro 有著眾多的優點,例如輕量、簡單、易於整合等。
當然 Shiro 也有不足,例如對 OAuth2 支援不夠,在 Spring Boot 面前無法充分展示自己的優勢等等,特別是隨著現在 Spring Boot 和 Spring Cloud 的流行,Spring Security 正在走向舞臺舞臺中央。
Spring Security 最早不叫 Spring Security ,叫 Acegi Security,叫 Acegi Security 並不是說它和 Spring 就沒有關係了,它依然是為 Spring 框架提供安全支援的。事實上,Java 領域的框架,很少有框架能夠脫離 Spring 框架獨立存在。
Acegi Security 基於 Spring,可以幫助我們為專案建立豐富的角色與許可權管理,但是最廣為人詬病的則是它臃腫繁瑣的配置,這一問題最終也遺傳給了 Spring Security。
在 Acegi Security 時代,網上流傳一句話:“每當有人要使用 Acegi Security,就會有一個精靈死去。”足見 Acegi Security 的配置是多麼可怕。
當 Acegi Security 投入 Spring 懷抱之後,先把這個名字改了,這就是大家所見到的 Spring Security 了,然後配置也得到了極大的簡化。
但是和 Shiro 相比,人們對 Spring Security 的評價依然中重量級、配置繁瑣。
直到有一天 Spring Boot 像謎一般出現在江湖邊緣,徹底顛覆了 JavaEE 的世界。一人得道雞犬升天,Spring Security 也因此飛上枝頭變鳳凰。
到現在,要不要學習 Spring Security 已經不是問題了,無論是 Spring Boot 還是 Spring Cloud,你都有足夠多的機會接觸到 Spring Security。
二、核心功能
對於一個許可權管理框架而言,無論是 Shiro 還是 Spring Security,最最核心的功能,無非就是兩方面:
認證
授權
通俗點說,認證就是我們常說的登入,授權就是許可權鑑別,看看請求是否具備相應的許可權。
雖然就是一個簡簡單單的登入,可是也能玩出很多花樣來。
Spring Security 支援多種不同的認證方式,這些認證方式有的是 Spring Security 自己提供的認證功能,有的是第三方標準組織制訂的,主要有如下一些:
一些比較常見的認證方式:
HTTP BASIC authentication headers:基於IETF RFC 標準。
HTTP Digest authentication headers:基於IETF RFC 標準。
HTTP X.509 client certificate exchange:基於IETF RFC 標準。
LDAP:跨平臺身份驗證。
Form-based authentication:基於表單的身份驗證。
Run-as authentication:使用者使用者臨時以某一個身份登入。
OpenID authentication:去中心化認證。
除了這些常見的認證方式之外,一些比較冷門的認證方式,Spring Security 也提供了支援。
Jasig Central Authentication Service:單點登入。
Automatic “remember-me” authentication:記住我登入(允許一些非敏感操作)。
Anonymous authentication:匿名登入。
。。。。。。
作為一個開放的平臺,Spring Security 提供的認證機制不僅僅是上面這些。如果上面這些認證機制依然無法滿足你的需求,我們也可以自己定製認證邏輯。當我們需要和一些“老破舊”的系統進行整合時,自定義認證邏輯就顯得非常重要了。
除了認證,剩下的就是授權了。
Spring Security 支援基於 URL 的請求授權、支援方法訪問授權以及物件訪問授權。
三、SpringSecurity 作用
安全這一塊從來都有說不完的話題,一個簡單的註冊登入很好做,但是你要是考慮到各種各樣的攻擊,XSS、CSRF 等等,一個簡單的註冊登入也能做的很複雜。
幸運的是,即使你對各種攻擊不太熟悉,只要你用了 Spring Security,就能自動避免掉很多攻擊了,因為 Spring Security 已經自動幫我們完成很多防護了。
從這個角度講,我們學習 Spring Security,不僅僅是學習 Spring Security 的各種用法,也是去了解去熟悉各種網路攻擊。
相關文章
- 一篇文章帶你使用 JSON 格式資料完成 SpringSecurity 登入JSONSpringGse
- 一篇文章帶你「重新認識」執行緒上下文切換怎麼玩兒執行緒
- 一篇文章帶你吃透 Docker 原理Docker
- 一篇文章帶你入門Zookeeper
- 帶你真正認識ViewView
- 一篇文章帶你搞定 SpringSecurity 配置多個HttpSecurity 和實現對於方法安全的控制SpringGseHTTP
- 一篇文章帶你快速入門createjsJS
- 一文帶你認識DockerDocker
- 帶你認識Photoshop的混合模式模式
- 一篇文章帶你初步瞭解—CSS特指度CSS
- 一篇文章帶你瞭解和使用Promise物件Promise物件
- 一篇文章帶你瞭解HTML5 MathMLHTML
- 一篇文章帶你讀懂Redis的哨兵模式Redis模式
- # 一篇文章帶你入門軟體測試
- MySQL十種鎖,一篇文章帶你全解析MySql
- 一篇文章帶你瞭解——Kotlin協程Kotlin
- 一篇文章帶你瞭解介面自動化
- 一篇文章帶你掌握效能測試工具——JmeterJMeter
- 一篇文章帶你弄懂Kerberos的設計思路ROS
- 一篇文章帶你玩轉正規表示式
- 帶你認識Web前端工程師Web前端工程師
- 一篇文章帶你瞭解HTML格式化元素HTML
- 一篇文章帶你瞭解CSS 分頁例項CSS
- 一篇文章帶你搞懂 etcd 3.5 的核心特性
- 一篇文章帶你吃透hashmap(面試指南升級版)HashMap面試
- 一篇文章帶你入門SQL程式設計GIFUSQL程式設計
- 一篇文章帶你瞭解高可用架構分析架構
- 好程式設計師帶你認識“jQuery”程式設計師jQuery
- 7.帶你認識Dart中的MapDart
- 一篇文章帶你掌握Flex佈局的所有用法Flex
- 一篇文章帶你瞭解設計模式——建立者模式設計模式
- 一文帶你認識Spring事務Spring
- 帶你認識那些App可靠性設計APP
- 【架構視角】一篇文章帶你徹底吃透Spring架構Spring
- 一篇文章帶你瞭解設計模式——結構型模式設計模式
- 一篇文章帶你瞭解如何測試訊息佇列佇列
- 固態硬碟知識點一篇文章都告訴你!硬碟
- 一篇文章構建你的 NodeJS 知識體系NodeJS