spring-security 使DaoAuthenticationProvider在Web安全配置器适配器弃用后与AuthenticationManager一起工作

rdrgkggo  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(185)

我正在创建一个完整的用户登录和注册后端系统,带有电子邮件验证功能,并使用PostgreSQL来存储用户的凭据。我已经到了一个安全层出现问题的地步。更具体地说,我有以下代码,由于WebSecurityConfigurerAdapter被弃用,我想更改这些代码:

折旧前的旧版本

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(daoAuthenticationProvider());
    }

    @Bean
    public DaoAuthenticationProvider daoAuthenticationProvider() {
        DaoAuthenticationProvider provider =
                new DaoAuthenticationProvider();
        provider.setPasswordEncoder(bCryptPasswordEncoder);
        provider.setUserDetailsService(applicationUserService);
        return provider;
    }

我搜索了this问题,发现现在可以通过以下方式访问AuthenticationManagerBuilder:

最新版本的身份验证管理器

@Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
        return authenticationConfiguration.getAuthenticationManager();
    }

我的问题是我找不到一种方法来注入我的daoAuthenticationProvider到AuthenticationManager的最新方法中。有什么建议吗???

6mw9ycah

6mw9ycah1#

您应该不需要AuthenticationConfiguration,您可以创建自己的bean,如下所示:

@Bean
public AuthenticationManager authenticationManager(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService) {
    DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
    provider.setPasswordEncoder(passwordEncoder);
    provider.setUserDetailsService(userDetailsService);
    return new ProviderManager(provider);
}
nom7f22z

nom7f22z2#

添加自定义身份验证提供程序是在SecurityFilterChain bean中配置的。虽然查看了给定的代码,但标准DAO身份验证将自动添加http.formLogin(),而不需要AuthenticationProvider。

@Bean
public SecurityFilterChain filterChain(DaoAuthenticationProvider daoAuthenticationProvider) throws Exception
{
    http.authenticationProvider(daoAuthenticationProvider);
    return http.build();
}

另请参阅https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

相关问题