SpringBoot企業級整合SpringSecurity(WEB+APP+授權)
SpringSecurity核心功能
1.認證(你是誰)
2.授權(你能幹什麼)
3.攻擊防護(防止偽造身份)
這張是SpringSecurity的基本原理圖,最右邊的就是我們controller介面,前面的大框框就是我們的過濾器,SpringSecurity就是一組過濾器,他的核心也就是這樣一條過濾鏈,訪問的所有請求都會經過SpringSecurity的過濾器,同樣相應也會從過濾器中返回,這些過濾器SpringBoot啟動的時候就會把這些過濾器配置進去
UsernamePasswordAuthenticationFilter-BasicAuthenticationFilter
這個過濾器鏈上有很多的過濾器,這裡面第一個和第二個是過濾器中比較核心的,他們的作用就是用來校驗使用者的身份,每一個綠色的方塊都代表一個過濾器, 每一個過濾器負責處理一種認證方式,比如基本的http.formLogin()、對應著UsernamePasswordAuthenticationFilter過濾器、http.httpBasic()就對應BasicAuthenticationFilter過濾器,
那麼在請求到達相關的綠色過濾器時,如http.formLogin()-UsernamePasswordAuthenticationFilter這個過濾器時,就會觸發檢查當前請求是否是一個登陸請求,在判斷請求中是否攜帶使用者名稱-密碼,若是符合這些條件,那麼這個過濾器就會試圖去登入,若是當前請求不滿足這些條件,那麼就會放過當前請求,下發給下一個過濾器,那麼如上圖整個過濾器鏈上UsernamePasswordAuthenticationFilter的下一個過濾器是BasicAuthenticationFilter,那麼當請求到達BasicAuthenticationFilter過濾器後又會判斷觸發當前過濾器的條件,如請求頭中是否攜帶Basic登入的相關資訊,如果有的話就會嘗試Bash64 解碼,嘗試登入,如果還有一些其他的自定義過濾器的話也是這樣的邏輯,按照這個流程他會一步一步往下走,如果在某個過濾器上認證成功後會在請求上做一個標記,用來標識當前這個請求的使用者授權成功了 。
這裡的原始碼也就是判斷請求路徑中是否為login,請求方式為POST,如果符合這個條件就會在下面開始嘗試登入
FilterSecurityInterceptor
請求經過綠色的過濾器後來到橙色的FilterSecurityInterceptor這樣的一個過濾器上,這個過濾器是整個SpringSecurity過濾器鏈上的最後一環,他是最終的守門人,在他後面就是我們的Controller API介面服務了,在這個過濾器裡面他能夠決定請求能不能訪問API請求,他是根據我們程式碼裡面的配置邏輯來的,也就是上面程式碼中.add()中新增的相關配置。
ExceptionTranslationFilter
如果這個過濾器驗證身份沒過就會丟擲異常, 在這個異常丟擲來的前面會有一個ExceptionTranslationFilter來捕獲後面這個過濾器丟擲的異常,這個異常捕獲過濾器會根據丟擲的異常做相應的處理,會根據前面的表單過濾器,或者Basic過濾器引導到對應的登入方式上面,SpringSecurity提供的所有功能特性都是建立在這個過濾器鏈的基礎上的,比如驗證碼登入,第三方微信登入,QQ登入,實際上就是在這個過濾器鏈上加這種綠色的過濾器來支援不同的認證方式,在實際的程式執行的時候,過濾器鏈上的過濾器不止這幾種,還有很多的其他過濾器,文章後面會詳細介紹其他的過濾器!在過濾器鏈上綠色的過濾器部分我們是可以通過配置決定某個過濾器是否生效的,
注意
除了綠色的以外,其他的過濾器我們都是不能控制的,他們都是在過濾器鏈上,而且一定是會在SpringSecurity事先指定的過濾器鏈上的順序位置,比如藍色的異常過濾器一定會在橙色的過濾器之前,這個位置我們是不能取更改的,也不能從SpringSecurity的過濾器鏈上去掉。
相關文章
- SpringBoot--- 使用SpringSecurity進行授權認證Spring BootGse
- SpringSecurity之授權SpringGse
- SpringBoot 整合SpringSecurity JWTSpring BootGseJWT
- SpringBoot 整合 SpringSecurity 梳理Spring BootGse
- 企業級 SpringBoot 教程 (八)springboot整合spring cacheSpring Boot
- 企業級 SpringBoot 教程 (二十四)springboot整合dockerSpring BootDocker
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- SpringSecurity認證和授權流程詳解SpringGse
- Samba:打造企業級授權檔案共享伺服器Samba伺服器
- 企業 SpringBoot 教程(六)springboot整合mybatisSpring BootMyBatis
- 企業級SpringBoot教程(十一)springboot整合swagger2,構建Restful APISpring BootSwaggerRESTAPI
- SpringSecurity(1)---認證+授權程式碼實現SpringGse
- SpringSecurity許可權管理系統實戰—四、整合SpringSecurity(上)SpringGse
- SpringSecurity許可權管理系統實戰—五、整合SpringSecurity(下)SpringGse
- SpringSecurity許可權管理系統實戰—六、SpringSecurity整合JWTSpringGseJWT
- SpringBoot2 整合 SpringSecurity 框架,實現使用者許可權安全管理Spring BootGse框架
- 電子商務Java微服務 SpringBoot整合SpringSecurityJava微服務Spring BootGse
- SpringBoot框架整合SpringSecurity實現安全訪問控制Spring Boot框架Gse
- technology-integration(七)---使用SpringSecurity做JWT認證授權SpringGseJWT
- SpringBoot--- SpringSecurity進行登出,許可權控制Spring BootGse
- SpringBoot之整合SpringSecurity,為自己的系統提供安全保障Spring BootGse
- (七) SpringBoot起飛之路-整合SpringSecurity(Mybatis、JDBC、記憶體)Spring BootGseMyBatisJDBC記憶體
- Asp.Net Core 企業微信靜默授權ASP.NET
- .NET Core企業微信網頁授權登入網頁
- SpringSecurity之整合JWTSpringGseJWT
- SpringBoot+Shiro學習(四):Realm授權Spring Boot
- SpringBoot 整合 SpringSecurity + MySQL + JWT 附原始碼,廢話不多直接盤Spring BootGseMySqlJWT原始碼
- Shiro【授權、整合Spirng、Shiro過濾器】過濾器
- RBAC許可權---SpringBoot整合SecuritySpring Boot
- 企業級SpringBoot與Dubbo的並用Spring Boot
- 企業級 SpringBoot 教程 (二十五)sprinboot整合elk,搭建實時日誌平臺Spring Boot
- springboot+vue專案如何整合企業微信Spring BootVue
- 在SpringBoot中使用SpringSecuritySpring BootGse
- 九、Spring Boot整合Spring Security之授權概述Spring Boot
- SpringBoot與Shiro整合-許可權管理Spring Boot
- Springboot+Vue實現線上聊天室專案-整合springSecurity配置實現登入的許可權控制Spring BootVueGse
- SpringBoot2.x版本整合SpringSecurity、Oauth2進行password認證Spring BootGseOAuth
- SpringBoot2 整合OAuth2元件,模擬第三方授權訪問Spring BootOAuth元件