认证是由 AuthenticationManager 来管理的,可是真正进行认证的是 AuthenticationManager 中定义的 AuthenticationProvider。AuthenticationManager 中能够定义有多个 AuthenticationProvider。当咱们使用 authentication-provider 元素来定义一个 AuthenticationProvider 时,若是没有指定对应关联的 AuthenticationProvider 对象,Spring Security 默认会使用 DaoAuthenticationProvider。DaoAuthenticationProvider 在进行认证的时候须要一个 UserDetailsService 来获取用户的信息 UserDetails,其中包括用户名、密码和所拥有的权限等。因此若是咱们须要改变认证的方式,咱们能够实现本身的 AuthenticationProvider;若是须要改变认证的用户信息来源,咱们能够实现 UserDetailsService。