Spring mvc 重写configure(authenticationmanagerabuilder)方法与仅创建DaoAuthenticationProvider之间的区别

Spring mvc 重写configure(authenticationmanagerabuilder)方法与仅创建DaoAuthenticationProvider之间的区别,spring-mvc,spring-security,spring-data-jpa,Spring Mvc,Spring Security,Spring Data Jpa,我正在试用使用JPA的Spring安全认证。我看到了两个youtube频道(Java Brains)和(Telusko)。Java Brains guy已经从WebSecurityConfigure中重写了configure(AuthenticationManagerBuilder Auth)方法,Telusko guy使用了一个bean来设置DaoAuthenticationProvider来配置userDetailService。我知道authenticationManager调用authe

我正在试用使用JPA的Spring安全认证。我看到了两个youtube频道(Java Brains)和(Telusko)。Java Brains guy已经从WebSecurityConfigure中重写了configure(AuthenticationManagerBuilder Auth)方法,Telusko guy使用了一个bean来设置DaoAuthenticationProvider来配置userDetailService。我知道authenticationManager调用authenticationProvider,inturn调用userDetailService加载用户。如果我错了就纠正。有人能解释一下这两种方法的区别吗。提前感谢。

区别在于身份验证的一种方式(DaoAuthenticationProvider)与开放更多选择的方式(AuthenticationManagerBuilder)。 通过配置DaoAuthenticationProvider,意味着您选择“Dao”/“userDetailService”对用户进行身份验证。 Spring Security使用身份验证管理器进行身份验证,ProviderManager是默认的身份验证管理器,它通过AuthenticationProviders列表迭代身份验证请求。DaoAuthenticationProvider就是其中之一

通过使用方法配置身份验证管理器:configure(AuthenticationManagerBuilder Auth) 您有更多的灵活性,可以配置身份验证管理器以使用自定义的身份验证提供程序。(您可以使用CustomAuthenticationProvider实现AuthenticationProvider接口)

您还可以通过简单地提供userdetailservice来配置DaoAuthenticationProvider,因为AuthenticationManagerBuilder将连接它

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }
尽管如此,使用AuthenticationManagerBuilder更为常见,因为它可以用于配置不同类型的身份验证提供程序

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }