DaoAuthenticationProvider

DaoAuthenticationProvider 是一個 AuthenticationProvider 實現,它使用 UserDetailsServicePasswordEncoder 來認證使用者名稱和密碼。

本節將探討 DaoAuthenticationProvider 在 Spring Security 中如何工作。下圖解釋了 讀取使用者名稱和密碼 部分圖中 AuthenticationManager 的工作原理。

daoauthenticationprovider
圖 1. DaoAuthenticationProvider 用法

number 1 來自 讀取使用者名稱和密碼 部分的認證 Filter 將一個 UsernamePasswordAuthenticationToken 傳遞給 AuthenticationManager,該管理器由 ProviderManager 實現。

number 2 ProviderManager 被配置為使用型別為 DaoAuthenticationProviderAuthenticationProvider

number 3 DaoAuthenticationProviderUserDetailsService 中查詢 UserDetails

number 4 DaoAuthenticationProvider 使用 PasswordEncoder 來驗證上一步返回的 UserDetails 中的密碼。

number 5 當認證成功時,返回的 Authentication 型別為 UsernamePasswordAuthenticationToken,其主體是配置的 UserDetailsService 返回的 UserDetails。最終,返回的 UsernamePasswordAuthenticationToken 由認證 Filter 設定到 SecurityContextHolder 中。