为什么在实施基本身份验证时使用身份验证提供程序?春季安全性

时间:2020-06-30 08:31:18

标签: spring database spring-boot spring-security basic-authentication

现在,我正在尝试使用Spring安全性来学习基本身份验证+数据库。 我已经完成了UserDetails和UserDetailsS​​ervice的实现(在这里我从数据库中获取用户),并使用装饰器模式使用我自己的“ 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中有任何新功能已经涵盖了这种“幕后”实现。 正如我所说,没有这种实现,我的应用程序应该可以正常工作。 这就是为什么我问是否有人有很好的解释。

1 个答案:

答案 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);

所以您的评论很有意义。也就是说,通过定义userDetailsServicepasswordEncoder bean,Spring Security和autowired

会检测到它们