認識Spring Security安全框架
Spring Security是什麼?
Spring Security是一個強大且高度可定製的身份驗證和訪問控制架構。
SpringSecurrity的兩個操作:
認證:確認使用者可以訪問當前系統。
授權:確認使用者可以執行操作的許可權。
SpringSecurity的元件
核心模組:包含核心的驗證和訪問控制類以及介面、遠端支援和基本的配置的API。
遠端呼叫:提供與Spring Remoting的集合。
Web網頁:包含網站安全的基礎程式碼,包含Spring Security頁面驗證服務和基於URL的訪問控制。
配置:如果使用Spring Security XML命令空間進行配置,需要使用該模組。
LDAP:LDAP驗證和配置程式碼
ACL訪問控制表:用於在應用程式中對特定域物件例項應用安全性。
CAS:用於CAS的SSO伺服器使用Spring Security網頁驗證
OpenID:使用外部的OpenID伺服器驗證使用者
Test:支援Spring Security的測試
注:
Spring Remoting :Spring提供遠端呼叫的模組;
LDAP:是輕量級的目錄訪問協議
CAS:中央認證服務
OpenID 是一個以使用者為中心的數字身份識別框架
Spring核心模組中核心類:
Authentication:表示使用者認證資訊 (使用者的封裝類)
SecurityContextHolder :使用來存放SecurityContext的。SecurityContext中存放著Authentication的引用。
String username =SecurityContextHolder.getContext().getAuthentication().getName();
UserDetails:是Spring Security的核心介面。其中定義了一些可以使用者使用者、密碼、許可權等與認證相關的資訊的方法。 我們通常要實現UserDetailsService來定義自己的使用者類。
UserDetailsService:在進行認證的時候SpringSecurity 會通過UserDetailsService的LoadUserByUsername()方法獲取UserDetails進行驗證。認證之後,將該UserDetails賦給認證通過的Authentication的principal,再放入SecurityContext。
GrantedAuthority
返回值是一個GrantedAuthority型別的陣列,每一個GrantedAuthority代表一種許可權。
DaoAuthenticationProvider:實現了AuthenticationProvider介面,用於進行使用者認證的處理。
PasswordEncoder:用於對密碼進行加密。有md5、SHA-256等,推薦使用BCryptPasswordEncoder。
BCryptPasswordEncoder使用BCrypt的強雜湊雜湊加密實現,並可以由客戶端指定加密強度。
當SpringBoot 遇到SpringSecurity:
SpringBoot針對Spring Security提供了自動配置的功能,極大簡化開發工作