使用 JdbcUserDetailsManager 与自己的 UserDetailsS​​ervice

Posted

技术标签:

【中文标题】使用 JdbcUserDetailsManager 与自己的 UserDetailsS​​ervice【英文标题】:Using JdbcUserDetailsManager vs own UserDetailsService 【发布时间】:2013-04-25 12:04:57 【问题描述】:

我正在学习 Spring Security,但我不完全了解是否应该使用 JdbcUserDetailsManagerUserDetailsService 的自定义实现。我正在使用数据库来存储用户。

我不明白JdbcUserDetailsManager 为您提供了什么,除了很多我不确定我想使用的方法吗?如果您有验证等怎么办?您是否将其包装在自己的 UserDetailsService 实现中?

我的意思是,你会在你的应用程序中泄露这个管理器类吗?自己创建更好吗?

【问题讨论】:

【参考方案1】:

有一些区别:

    UserDetailsService是加载用户详情的核心接口,供DaoAuthenticationProvider使用。 UserDetailsService 有一个子接口,定义了对用户抽象的 CRUD 操作:UserDetailsManager JdbcDaoImplUserDetailsService 的 JDBC 实现。 JdbcUserDetailsManagerUserDetailsManager 的 JDBC 实现和 JdbcDaoImpl 的扩展。它还提供了接口GroupManager

基于差异,它可能会影响您决定使用、公开、包装甚至实现哪个。

【讨论】:

好吧,所以我猜 JdbcUserDetailsManager 也有检查密码等的逻辑? UserDetailsS​​ervice 没有哪个简单的实现? 我相信看看AbstractUserDetailsAuthenticationProvider 和DaoAuthenticationProvider 会很好。凭据的实际检查发生在这两个类中。 但是,JdbcDaoImpl 怎么能用作身份验证提供程序呢?我看不到它在哪里实现了接口? 认证不是 JdbcDaoImpl 的责任。有一种方法DaAuthenticationProvider#setUserDetailsService,这就是它们在身份验证过程中的粘合方式。

以上是关于使用 JdbcUserDetailsManager 与自己的 UserDetailsS​​ervice的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security---将用户数据存入数据库详解

3.springsecurity——将用户数据存入数据库

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇