1 什么是spring security?
一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方式的安全框架(簡單說是對訪問權限進行控制)。
應用的安全性包括用戶認證(Authentication)和用戶授權(Authorization)兩個部分。
用戶認證指的是驗證某個用戶是否為系統中的合法主體,也就是說用戶能否訪問該系統。
用戶認證一般要求用戶提供用戶名和密碼。系統通過校驗用戶名和密碼來完成認證過程。
用戶授權指的是驗證某個用戶是否有權限執行某個操作。在一個系統中,不同用戶所具有的權限是不同的。
比如對一個文件來說,有的用戶只能進行讀取,而有的用戶可以進行修改。
一般來說,系統會為不同的用戶分配不同的角色,而每個角色則對應一系列的權限。
spring security的主要核心功能為 認證和授權,所有的架構也是基於這兩個核心功能去實現的。
2 框架簡介
眾所周知想要對Web資源進行保護,最好的辦法莫過於Filter,要想對方法調用進行保護,最好的辦法莫過於AOP。所以springSecurity在我們進行用戶認證以及授予權限的時候,通過各種各樣的攔截器來控制權限的訪問,從而實現安全。
spring Security功能的實現主要是由一系列過濾器鏈相互配合完成。
1.springSecurityFilterChain中各個過濾器怎么創建的只需了解即可。不要太過關注。
2.重點記憶UsernamePasswordAuthenticationFilter,ExceptionTranslationFilter, FilterSecurityInterceptor這三個過濾器的作用及源碼分析。
3.重點記憶認證中Authentication,AuthenticationManager,ProviderManager, AuthenticationProvider,UserDetailsService,UserDetails這些類的作用及源碼分析。
4.重點記憶授權中FilterInvoction,SecurityMetadataSource,AccessDecisionManager的作用。
3 框架的核心組件
SecurityContextHolder:提供對SecurityContext的訪問
SecurityContext,:持有Authentication對象和其他可能需要的信息
AuthenticationManager 其中可以包含多個AuthenticationProvider
ProviderManager對象為AuthenticationManager接口的實現類
AuthenticationProvider 主要用來進行認證操作的類 調用其中的authenticate()方法去進行認證操作
Authentication:Spring Security方式的認證主體
GrantedAuthority:對認證主題的應用層面的授權,含當前用戶的權限信息,通常使用角色表示
UserDetails:構建Authentication對象必須的信息,可以自定義,可能需要訪問DB得到
UserDetailsService:通過username構建UserDetails對象,通過loadUserByUsername根據userName獲取UserDetail對象
(可以在這里基於自身業務進行自定義的實現 如通過數據庫,xml,緩存獲取等)
4 工作流程是怎樣的?
認證流程:
授權流程:
5 ***怎么用? - demo
6 有什么特點/ 優點?
1.將用戶登錄,權限控制分離出來,達到和其他控制、邏輯代碼完全分離。
2.在控制、邏輯代碼里面,可以通過spring容器的到我們登錄用戶的信息,可插拔性的體現。
3.自定義的權限控制訪問,不但是對某個URL可操控,同時可以對某個方法進行控制。
4.提供一些登錄相關的操作,如記住我、登錄成功跳轉頁面設定等等。
5.安全控制性好,對並發session可控性好。
7 如何做到權限控制??從大方面 一直到 代碼細節,由表及里來說