谁能告诉我什么时候使用WebSecurityConfigurerAdapter,什么时候使用UserDetailsService ?我刚开始学习spring安全,注意到扩展两个接口都可以创建安全实现。但是,如果我想为基于angular的网站和保存在数据库中的用户数据的web项目连接创建安全性,我应该使用哪一个?
您所谈论的组件具有非常不同的职责,因此问题我使用其中一个还是另一个?没有真正的意义。看一下这些组件的javadoc,了解它们之间的区别。
UserDetailsService
加载用户特定数据的核心接口。它作为用户DAO在整个框架中使用,并且是一种策略由DaoAuthenticationProvider使用。接口只需要一个只读方法,简化了操作支持新的数据访问策略。
WebSecurityConfigurerAdapter
为创建WebSecurityConfigurer实例提供了一个方便的基类。实现允许通过重写方法进行定制。
例如,您可以使用扩展WebSecurityConfigurerAdapter
的安全配置类,并使用自定义UserDetailsService
来加载用户信息,如下所示:
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setPasswordEncoder(new ShaPasswordEncoder());
authenticationProvider.setUserDetailsService(userService);
return authenticationProvider;
}
// ...
}
Spring Security的核心组件及其职责在参考指南中也有很好的描述。