如果我没有误解,AuthenticationProvider
使用UserDetailsService
来检索用户的属性,以便对Authentication
对象进行身份验证。
问题是,在下一个代码中,AuthenticationProvider
的{{1}}没有配置。
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
的另一个实施内部添加到春天背景中?在这种情况下,使用的是什么(在memoryAuthentication的情况下)。
配置的UserDetailsService
部分是否代表*.withUser("user").password("pass").roles("ADMIN")*
实施?
答案 0 :(得分:3)
是的,对于这样的配置,AuthenticationProvider
和UserDetailsService
bean是隐式配置的。
.inMemoryAuthentication()
将Spring Security配置为使用InMemoryUserDetailsManager
(间接)实现UserDetailsService
接口,因此它本身就是UserDetailsService
。
DaoAuthenticationProvider
用作AuthenticationProvider
inMemoryAuthentication()
。
.withUser("user").password("pass").roles("ADMIN")
配置InMemoryUserDetailsManager
已知的用户。这可以用于填充您想要用于登录的用户。
还有一件事:并非所有AuthenticationProvider
都使用UserDetailsService
来获取用户详细信息。实际上,在标准AuthenticationProvider
实施中,只有DaoAuthenticationProvider
类使用UserDetailsService
。