AuthenticationProvider

AuthenticationProvider

如果我没有误会,AuthenticationProvider使用UserDetailsService检索用户的属性,以便认证Authentication对象。

问题在于,在下一个代码中,没有为AuthenticationProvider进行配置,也没有为UserDetailsService进行配置。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("user").password("pass").roles("ADMIN").and().withUser("user1")
            .password("pass").roles("USER");
}

身份验证服务已设置。

我的问题是,是否有一个AuthenticationProvider的实现和另一个UserDetailsService的实现在内部添加到spring上下文中?在这种情况下,使用什么实现(在memoryAuthentication的情况下)。

配置的*.withUser("user").password("pass").roles("ADMIN")*部分是否表示UserDetailsService实现?

最佳答案

是的,对于这样的配置,AuthenticationProviderUserDetailsService bean是隐式配置的。
.inMemoryAuthentication()将Spring Security配置为使用InMemoryUserDetailsManager,它(间接地)实现UserDetailsService接口,因此它本身就是UserDetailsService

默认情况下,DaoAuthenticationProviderAuthenticationProvider一起用作inMemoryAuthentication()实现。
.withUser("user").password("pass").roles("ADMIN")将已知用户配置为InMemoryUserDetailsManager。可以使用您想要用来登录的用户来填充它。

还有一件事:并非所有的AuthenticationProvider都使用UserDetailsService获取用户详细信息。实际上,在标准AuthenticationProvider实现中,只有DaoAuthenticationProvider类使用UserDetailsService

07-24 09:53