java Spring Security 6在后台配置时是否会自动注入UserDetailsService?

cwtwac6a  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(204)

之前,我们必须覆盖WebSecurityConfigurerAdapter中的configure方法

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

但是现在我用Spring Security初始化了一个空的Sping Boot 项目,我注意到只需要创建一个实现UserDetailsService的类,并将其标记为@Service,然后定义PasswordEncoder bean来启动默认的Spring Security登录页面,它就可以正常工作了。我甚至没有任何Spring Security的配置文件。

zbq4xfa0

zbq4xfa01#

我注意到,只需创建一个实现UserDetailsService的类,并将其标记为@Service,然后定义PasswordEncoder bean来启动默认的Spring Security登录页面就足够了,它将正常工作。
这是一个正确的观察。Spring Security已经转向基于组件的配置,因为它更灵活。在没有WebSecurityConfigurerAdapter的情况下,configure()方法不再有用。
您所需要的只是将UserDetailsServicePasswordEncoder的实现都注册为Context中的Bean,或者定义用@Bean标注的方法,或者将它们定义为使用构造型标注的单独类(对于PasswordEncoder,您不太可能使用后一种方法,但这是可行的)。
当这些Bean在应用程序启动时被发现时,它们将替换Spring Security提供的默认Bean,负责HTTP基本身份验证流的AuthenticationProvider将使用您指定的UserDetailsServicePasswordEncoder

相关问题