为什么在实现基本身份验证时进行身份验证提供程序?春季安全



现在,我正在尝试使用Spring安全性学习基本的身份验证+数据库。 我已经完成了UserDetails和UserDetailsService的实现(这里我从数据库中获取用户(,并使用装饰器模式来使用我自己的"User"Bean。一切都按照应有的方式工作。

现在,我在不同的论坛,平台的许多示例中注意到的是,当开发人员在春季实现基本身份验证+ 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 安全中是否有任何新功能已经涵盖了这种"幕后"实现。 正如我所说,我的应用程序在没有这种实现的情况下可以正常工作。 这就是为什么我问是否有人有一个很好的解释。

看着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);

所以你的评论是有道理的。即通过定义userDetailsServicepasswordEncoder豆,它们被弹簧安全和autowired检测到

最新更新