有人可以解释我何时使用WebSecurityConfigurerAdapter和UserDetailsService。我刚开始学习spring security,注意到扩展这两个接口你可以创建安全实现。但是,如果我想从基于角度的站点和保存在数据库中的用户数据创建Web项目连接的安全性,我应该使用哪一个。
答案 0 :(得分:2)
您正在谈论的组件具有非常不同的职责,因此问题我是否使用其中一个?并没有多大意义。看看这些组件的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;
}
// ...
}
中也很好地描述了Spring Security的核心组件及其职责