【问题标题】:Spring Security when to use WebSecurityConfigurerAdapter and UserDetailsServiceSpring Security 何时使用 WebSecurityConfigurerAdapter 和 UserDetailsS​​ervice
【发布时间】:2016-01-24 17:22:24
【问题描述】:

谁能解释一下何时使用 WebSecurityConfigurerAdapter 以及何时使用 UserDetailsS​​ervice。我刚开始学习 Spring Security,注意到扩展这两个接口可以创建安全实现。但是,如果我想从基于角度的站点和保存在数据库中的用户数据为 Web 项目连接创建安全性,我应该使用哪一个。

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    您所谈论的组件具有非常不同的职责,因此我使用其中一个或另一个?这个问题真的没有意义。查看这些组件的 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 的核心组件及其职责。

    【讨论】:

    • 感谢您的解释。是的,我的错,一开始没有抓住。
    • @Edgar 没问题。我添加了指向参考指南的答案的链接,即 Internal architecture 部分。那里描述了所有核心组件。我建议看看它:)
    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多