现在,我正在尝试使用Spring安全性来学习基本身份验证+数据库。 我已经完成了UserDetails和UserDetailsService的实现(在这里我从数据库中获取用户),并使用装饰器模式使用我自己的“ User” Bean。一切正常,应该工作。
现在,我在不同论坛,平台上的许多示例中都注意到,当开发人员在春季实现基本的auth + db时,他们使用的AuthenticationProvider令我感到困惑! 我所看到的一个简单示例:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(provider());
}
@Bean
DaoAuthenticationProvider provider() {
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setPasswordEncoder(getPasswordEncoder());
provider.setUserDetailsService(userService);
return provider;
}
有什么特别的理由可以做到这一点,还是在Spring Security中有任何新功能已经涵盖了这种“幕后”实现。 正如我所说,没有这种实现,我的应用程序应该可以正常工作。 这就是为什么我问是否有人有很好的解释。
答案 0 :(得分:1)
看着InitializeUserDetailsBeanManagerConfigurer.java
,
它具有以下代码片段并将其连接:
UserDetailsService userDetailsService = getBeanOrNull(UserDetailsService.class);
...
PasswordEncoder passwordEncoder = getBeanOrNull(PasswordEncoder.class);
....
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsService);
if (passwordEncoder != null) {
provider.setPasswordEncoder(passwordEncoder);
}
...
auth.authenticationProvider(provider);
所以您的评论很有意义。也就是说,通过定义userDetailsService
和passwordEncoder
bean,Spring Security和autowired