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