如果我没有误会,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
实现? 最佳答案
是的,对于这样的配置,AuthenticationProvider
和UserDetailsService
bean是隐式配置的。.inMemoryAuthentication()
将Spring Security配置为使用InMemoryUserDetailsManager
,它(间接地)实现UserDetailsService
接口,因此它本身就是UserDetailsService
。
默认情况下,DaoAuthenticationProvider
与AuthenticationProvider
一起用作inMemoryAuthentication()
实现。.withUser("user").password("pass").roles("ADMIN")
将已知用户配置为InMemoryUserDetailsManager
。可以使用您想要用来登录的用户来填充它。
还有一件事:并非所有的AuthenticationProvider
都使用UserDetailsService
获取用户详细信息。实际上,在标准AuthenticationProvider
实现中,只有DaoAuthenticationProvider
类使用UserDetailsService
。