spring security 相關技術選型:
由於 spring security 使用廣度不及 spring boot,且 spring 這兩年廢棄了許多項目,spring 的術語和稱呼都有一些改變。
網上看到的一些教程大多是過時的,2019年之前的文章、教程大都跟不上最新的潮流,2019的文章和教程大部分又是轉載的前幾年的,因此需要看 spring 官方文檔。
由於 spring 官方看起來也需要時間,因此特作此說明,以減少各位技術leader和愛好者們在項目的技術選型中花費的時間。
先上結論:
- 優先選擇 Spring 官方推薦的 spring security 5.2.x +
- 生產環境版本優先選擇次最新版的最新的 SR,如當前最新是 H 版本,用於生產則最好使用 G 版本的最新一次 SR(官方標註GA的版本)
我的猜測:Spring 官方未來會廢棄一切與 security 相關的子項目並遷移至 Spring Security 中,
未來想在 Spring 中尋找與 security 相關的部分,只需學習 spring security 即可。
-
在 spring security5.3.x 前可以選擇使用
spring-security-oauth
(一年內不會被淘汰,未來終將被 spring security5.x取代) -
不要再使用
spring-security-xxx
、spring-social
等 -
不推薦使用
spring-cloud-starter-oauth2
、spring-cloud-starter-security
(有計劃被廢棄)
spring-cloud-security
該工程中,包含4個模塊,一個依賴管理,一個基礎模塊,兩個 starter(spring-cloud-starter-oauth2
、spring-cloud-starter-security
)
- 好多教程中引入了
spring-cloud-starter-oauth2
、spring-cloud-starter-security
依賴,我要使用嗎? - 查看 spring-cloud-security 發佈規劃
得知spring-cloud-starter-oauth2
、spring-cloud-starter-security
在2.2.1版本(對應 spring-cloud Hoxton.SR2)將廢棄,因此不再建議使用,
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-S8BgwCqO-1580873604043)(img/spring-cloud-security-1.png)]
- spring-cloud-security 的官方文檔 中的 sample (示例)部分
提供的4個例子都是 5 年前提交的,用的還是 spring-boot-1.x
既然兩個starter都沒了,除了依賴管理模塊,只剩一個spring-cloud-security
,那麼要不要繼續使用 spring-cloud-security 呢?
看一下他的源碼,
發現其實該模塊就提供了3個功能,也沒幾個類,因此即使依賴也沒有任何關係,也十分容易遷移或者適配,
所以我的建議是無所謂,
雖然可以預見到,Spring官方未來會廢棄一切與 security 相關的子項目並遷移至 Spring Security 中,
但spring 官方還沒有正式出廢棄 spring-cloud-security
的通知,
也沒出遷移 spring-cloud-security 到 spring-security 5.2.x 的說明文檔,
況且它本身的代碼和功能不多,暫時使用也無妨。
spring-security-xxx 系列
結論:該系列項目均停止維護,新項目中直接考慮使用 spring-security 5.2.x+即可,因爲這些項目提供的主要功能集成進 spring security 中了
github: spring-security 5.2.0.RELEASE
spring-security-oauth
該項目是spring-security-xxx 系列中使用最廣的項目,2年前 spring-security-oauth 是 spring 提供的 oauth 的解決方案,爲什麼現在不推薦使用了呢?
- spring-security-oauth 官方 推薦使用 spring security 5.2.x + 替代 spring security oauth
- spring security oauth 部分文檔
- 該項目的最後一次提交是2019年11月左右
- 如何從 spring-security-oauth 2.x 遷移到 spring security 5.2.x
- Spring Security OAuth 2.0路線圖 表示
Spring Security OAuth 已經進入維護模式,未來會全部遷移至 spring security 5.x
其2.3版本將於2020年3月停止開發,
當spring security與Spring Security OAuth的功能一致後,停止2.4.x版本的開發,
因此推薦使用spring security5.2+ - spring 下一代 oauth2
- spring 中與 oauth 相關項目功能一覽
- 相關 issue
- 認證服務器遷移?spring-security-oauth 提供了認證服務器的能力,而 spring security5.2.x中沒有對應的支持,官方表示至少5.3.x會支持認證服務器
- spring security 5.3.x 大概在2020年中旬發佈
- github上對認證服務器的支持討論
該項目提供的能力逐漸由 spring-security 下的 spring-security-oauth-xxx 接管
spring-security-saml
該項目是 saml 協議的一個實現
spring-security-saml爲什麼剛出1.0版本就不維護了?
- 該項目不太活躍,被關閉了,後續會慢慢集成進 spring security 中
- 該項目的最後一次提交是2019年11月左右
spring-security-kerberos
該項目是 kerberos 的一個實現
- 該項目的最後一次提交是2019年2月左右,可見也早早停止維護了
spring-io/platform
該項目主要用於依賴管理,作爲 spring boot 1.x 系列的依賴管理項目,spring boot 2.x 現已經用 spring-boot-dependencies
替代
- 2019年4月左右已經停止維護
spring-social
github上有一些基於 spring-social 實現的第三方登錄 sdk,爲什麼現在廢棄了?
spring-social
是與spring-security-oauth
協同使用的模塊,提供了第三方登錄,作爲 oauth client 的角色- 2018.7.3 spring-social官方聲明
- Spring Social所提供的許多功能(spring social維護者認爲是Spring Social最有價值的部分)現在已成爲Spring Security的一部分
- 2019年7月3日停止維護支持。
spring-security 5.2.x+
spring-security 5
開始將以上部分整合,5.2版本提供了部分 oauth2 支持,以上涉及的項目被逐漸合併至 spring security 5.2 以及以後的版本中,
spring-security 5.2.x
並不能完全替代以上的項目提供的功能,只是將上面中部分主要的功能先集成進來
預計在未來 spring-security 5.3.x
(5.3第一個版本大約在2020.3) 之後的版本,將可以只使用 spring-security
,不需要在學習以上的其他的部分
spring-security 入門
一、基本入門
打開 官方文檔 - 熟悉 spring boot demo
-
先看依賴
需要引入的 spring security 的jar有 spring-security-config、spring-security-web 這兩個 -
看配置,發現不需要任何額外的配置
-
涉及到 spring security 的文件只有SecurityConfig.java
- 加入註解 @EnableWebSecurity
- 繼承 WebSecurityConfigurerAdapter
- 配置自己的安全策略
.authorizeRequests
配置認證、授權.formLogin
配置登錄相關
- 注入一個 UserDetailsService,實際中一般實現這個接口,查詢數據庫。
- 運行這個demo查看效果
- 發現除了登錄頁外,其他請求都無法訪問
- 使用控制檯打印的 隨機密碼 成功登錄後都可以訪問
- 修改 SecurityConfig 中的
/user/**
的訪問權限,改爲 admin 後,發現訪問不了 - 再修改 userDetail 的 role,改爲 admin,又可以訪問了