如何在Spring Boot中为preAuthenticationChecks和postAuthenticationChecks配置UserDetailsChecker

时间:2018-05-23 15:31:48

标签: spring spring-boot spring-security

我正在寻找一种“最佳实践”解决方案,用于在Spring Boot中为preAuthenticationChecks和/或postAuthenticationChecks配置UserDetailsChecker(请参阅AbstractUserDetailsAuthenticationProviderDaoAuthenticationProvider)。

是否绝对有必要创建自定义DaoAuthenticationProvider

无法通过WebSecurityConfigurerAdapterAuthenticationManagerBuilder自定义

1 个答案:

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