【问题标题】:What is the benefit of UserDetailsService provided by the Spring securitySpring安全提供的UserDetailsS​​ervice有什么好处
【发布时间】:2021-06-01 15:11:06
【问题描述】:

我在我的项目中使用spring security,我知道提供的接口UserDetailsService就像我们编写的普通接口一样,但我想知道Spring人员提供这个接口的背后是否有任何特殊目的包含单一方法?

我观察到,我们将实现类传递给AuthenticationBuilderManager 的方法userDetailsService(),因此我们无需费心在控制器中显式调用服务。

除此之外还有其他好处吗?

【问题讨论】:

  • 我们在 java 中使用接口,所以我们可以使用多态性。相同的函数名称但不同的实现。我们称之为一种方法,实现的类可以调用数据库、ldap 服务器、内存数据库或任何其他服务等。stackoverflow.com/questions/3528420/…
  • 如果你阅读了 api docs.spring.io/spring-security/site/docs/current/api/org/… 你可以看到所有的实现 CachingUserDetailsService, InMemoryUserDetailsManager, JdbcDaoImpl, JdbcUserDetailsManager, LdapUserDetailsManager, LdapUserDetailsService
  • 我对核心概念很了解,但我的问题还是没有答案,如果我们能写服务,那么有什么特别的,那么只有Spring人给我们提供了这个接口
  • 我不明白你在说什么?你是什​​么意思有什么特别的? then only Spring people provides us this Interface这句话没有意义,因为它不是正确的英语。
  • 我的意思是说,我们可以自己编写服务,对吧?那么为什么 Spring 社区单独提供 UserDetailsS​​ervice 呢?这个界面有什么特别之处吗?

标签: spring-security


【解决方案1】:

DaoAuthenticationProvider 使用UserDetailsService 接口检索用户名、密码和其他属性,以使用用户名和密码进行身份验证。拥有核心接口的好处是用户可以定义自己的方式来检索UserDetails,而 Spring Security 只需要该类型的 @Bean

例如:

@Bean
UserDetailsService customUserDetailsService() {
    return new FileSystemUserDetailsService();
}

Spring Security 不需要知道您正在从 OS 文件系统加载用户,因为它只需要您提供 UserDetailsService 类型的 @Bean。通过这种方式,它简化了对新数据访问策略的支持。 Spring Security docs有更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2012-06-11
    • 2016-12-29
    • 2019-09-11
    • 2013-08-01
    相关资源
    最近更新 更多