【发布时间】:2016-01-24 17:22:24
【问题描述】:
谁能解释一下何时使用 WebSecurityConfigurerAdapter 以及何时使用 UserDetailsService。我刚开始学习 Spring Security,注意到扩展这两个接口可以创建安全实现。但是,如果我想从基于角度的站点和保存在数据库中的用户数据为 Web 项目连接创建安全性,我应该使用哪一个。
【问题讨论】:
谁能解释一下何时使用 WebSecurityConfigurerAdapter 以及何时使用 UserDetailsService。我刚开始学习 Spring Security,注意到扩展这两个接口可以创建安全实现。但是,如果我想从基于角度的站点和保存在数据库中的用户数据为 Web 项目连接创建安全性,我应该使用哪一个。
【问题讨论】:
您所谈论的组件具有非常不同的职责,因此我使用其中一个或另一个?这个问题真的没有意义。查看这些组件的 JavaDocs 以了解其中的区别。
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;
}
// ...
}
reference guide 中也很好地描述了 Spring Security 的核心组件及其职责。
【讨论】: