一篇文章帶你認識 SpringSecurity

南淮北安發表於2020-09-26

一、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 的各種用法,也是去了解去熟悉各種網路攻擊。

相關文章