为什么在实施基本身份验证时使用身份验证提供程序? Spring 安全
Why authentication provider when implementing basic auth? Spring Security
现在,我正在尝试学习使用 Spring 安全性的基本身份验证 + 数据库。
我已经完成了 UserDetails 和 UserDetailsService 的实现(这里我从数据库中获取用户)并使用装饰器模式来使用我自己的“用户”Bean。一切正常。
现在,我在不同论坛和平台上的许多示例中注意到,当开发人员在 spring 中实现基本 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 安全性中是否有任何新功能已经涵盖了这种“幕后”实施。
正如我所说,我的应用程序在没有这种实现的情况下也能正常工作。
这就是为什么我想问一下有没有人有好的解释。
正在查看 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 安全和 autowired
检测到
现在,我正在尝试学习使用 Spring 安全性的基本身份验证 + 数据库。 我已经完成了 UserDetails 和 UserDetailsService 的实现(这里我从数据库中获取用户)并使用装饰器模式来使用我自己的“用户”Bean。一切正常。
现在,我在不同论坛和平台上的许多示例中注意到,当开发人员在 spring 中实现基本 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 安全性中是否有任何新功能已经涵盖了这种“幕后”实施。 正如我所说,我的应用程序在没有这种实现的情况下也能正常工作。 这就是为什么我想问一下有没有人有好的解释。
正在查看 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 安全和 autowired