認證是Spring Security的核心功能之一,Spring Security所提供的認證可以更好地保護系統的隱私數據與資源,只有當用戶的身份合法后方可訪問該系統的資源。Spring Security提供了默認的認證相關配置,開發者也可以根據自己實際的環境進行自定義身份認證配置。下面對Spring Security的認證流程以及自定義認證進行講解。
用戶認證就是判斷一個用戶的身份是否合法的過程,用戶訪問系統資源時系統要求驗證用戶的身份信息,身份合法方可繼續訪問,否則拒絕其訪問。
Spring Security的認證流程進行詳細介紹。
① 用戶提交用戶名和密碼進行認證請求后,被SecurityFilterChain中的 UsernamePasswordAuthenticationFilter過濾器獲取到,將用戶名和密碼封裝到UsernamePasswordAuthenticationToken對象中,該對象為Authentication的實現類。
② 過濾器將封裝用戶名和密碼的Authentication對象提交至AuthenticationManager(認證管理器)進行認證。
③ AuthenticationManager根據當前的認證類型進行認證,認證時會根據提交的用戶信息最終返回一個SpringSecurity的UserDetails對象,如果返回的UserDetails對象為空,則說明認證失敗,拋出異常。?
④ 如果返回的UserDetails對象不為空,則返回UserDetails對象,最后AuthenticationManager 認證管理器返回一個被填充滿了信息的Authentication 實例,包括權限信息, 身份信息,細節信息,但密碼通常會被移除。
⑤ SecurityContextHolder安全上下文容器存放填充了信息的Authentication,認證成功后通過 SecurityContextHolder.getContext().setAuthentication()方法,將Authentication設置到其中。?
?