我正在寻找一种“最佳实践”解决方案,用于在Spring Boot中为preAuthenticationChecks和/或postAuthenticationChecks配置UserDetailsChecker
(请参阅AbstractUserDetailsAuthenticationProvider
和DaoAuthenticationProvider
)。
是否绝对有必要创建自定义DaoAuthenticationProvider
?
无法通过WebSecurityConfigurerAdapter
或AuthenticationManagerBuilder
自定义
答案 0 :(得分:0)
回答我自己的问题:我用grep
搜索了春季启动源(v1.5.13.RELEASE和v2.0.2.RELEASE) - 没有结果。
至少在此版本中,如果要使用其他身份验证前或身份后检查,则必须创建自定义DaoAuthenticationProvider
。
编辑:“您必须创建自定义DaoAuthenticationProvider
”这一短语有点误导。在最近的一个项目中,我用以下方式完成了它:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig {
@Autowired
public void configureGlobal(
AuthenticationManagerBuilder auth,
MyUserAccountService myUserAccountService,
PasswordEncoder passwordEncoder,
MessageSourceAccessor messageSourceAccessor
) throws Exception {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
daoAuthenticationProvider.setUserDetailsService(myUserAccountService);
daoAuthenticationProvider.setPostAuthenticationChecks(new UserAccountChecker(messageSourceAccessor));
auth.authenticationProvider(daoAuthenticationProvider);
auth.userDetailsService(myUserAccountService).passwordEncoder(passwordEncoder);
}
[...]
}
此处UserAccountChecker implements UserDetailsChecker
是进行(后)身份验证测试的类(另请参阅DefaultPostAuthenticationChecks
中的课程AbstractUserDetailsAuthenticationProvider
)。