認證是由 AuthenticationManager 來管理的,可是真正進行認證的是 AuthenticationManager 中定義的 AuthenticationProvider。AuthenticationManager 中能夠定義有多個 AuthenticationProvider。當咱們使用 authentication-provider 元素來定義一個 AuthenticationProvider 時,若是沒有指定對應關聯的 AuthenticationProvider 對象,Spring Security 默認會使用 DaoAuthenticationProvider。DaoAuthenticationProvider 在進行認證的時候須要一個 UserDetailsService 來獲取用戶的信息 UserDetails,其中包括用戶名、密碼和所擁有的權限等。因此若是咱們須要改變認證的方式,咱們能夠實現本身的 AuthenticationProvider;若是須要改變認證的用戶信息來源,咱們能夠實現 UserDetailsService。