使用 JdbcUserDetailsManager 与自己的 UserDetailsService
Posted
技术标签:
【中文标题】使用 JdbcUserDetailsManager 与自己的 UserDetailsService【英文标题】:Using JdbcUserDetailsManager vs own UserDetailsService 【发布时间】:2013-04-25 12:04:57 【问题描述】:我正在学习 Spring Security,但我不完全了解是否应该使用 JdbcUserDetailsManager
或 UserDetailsService
的自定义实现。我正在使用数据库来存储用户。
我不明白JdbcUserDetailsManager
为您提供了什么,除了很多我不确定我想使用的方法吗?如果您有验证等怎么办?您是否将其包装在自己的 UserDetailsService
实现中?
我的意思是,你会在你的应用程序中泄露这个管理器类吗?自己创建更好吗?
【问题讨论】:
【参考方案1】:有一些区别:
UserDetailsService
是加载用户详情的核心接口,供DaoAuthenticationProvider
使用。
UserDetailsService
有一个子接口,定义了对用户抽象的 CRUD 操作:UserDetailsManager
JdbcDaoImpl
是 UserDetailsService
的 JDBC 实现。
JdbcUserDetailsManager
是 UserDetailsManager
的 JDBC 实现和 JdbcDaoImpl
的扩展。它还提供了接口GroupManager
基于差异,它可能会影响您决定使用、公开、包装甚至实现哪个。
【讨论】:
好吧,所以我猜 JdbcUserDetailsManager 也有检查密码等的逻辑? UserDetailsService 没有哪个简单的实现? 我相信看看AbstractUserDetailsAuthenticationProvider 和DaoAuthenticationProvider 会很好。凭据的实际检查发生在这两个类中。 但是,JdbcDaoImpl 怎么能用作身份验证提供程序呢?我看不到它在哪里实现了接口? 认证不是 JdbcDaoImpl 的责任。有一种方法DaAuthenticationProvider#setUserDetailsService
,这就是它们在身份验证过程中的粘合方式。以上是关于使用 JdbcUserDetailsManager 与自己的 UserDetailsService的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security---将用户数据存入数据库详解