SpringSecurity中的UserDetailsService深度解析

 更新时间:2025年11月12日 10:28:56   作者:爪哇小白2021  
文章介绍了Spring Security中的UserDetailsService接口,它用于自定义用户认证逻辑,通过实现该接口,可以自定义用户认证过程,文章详细解释了UserDetailsService接口的返回值、方法参数以及可能出现的异常,如UsernameNotFoundException,感兴趣的朋友跟随小编一起看看吧

关于security的权限认证可以看一下这个专栏的上一篇文章。 基础概念和入门的demo就不再这里面进行赘述了,今天学习一个这个UserDetailsService,

1、UserDetailsService详解

当什么也没有配置的时候,账号和密码是由 Spring Security 定义生成的。而在实际项目中账号和密码都是从数据 库中查询出来的。所以我们要通过自定义逻辑控制认证逻辑。如果需要自定义逻辑时,只需要实现 UserDetailsService 接口即可。接口定义如下:

2、返回值

直接看源码

要想返回 UserDetails 的实例就只能返回接口的实现类。SpringSecurity 中提供了如下的实例。对于我们只需要使 用里面的 User 类即可。注意 User 的全限定路径是:

org.springframework.security.core.userdetails.User

此处经常和系统中自己开发的 User 类弄混。

在User中也提供了很多的方法和属性

!!!虽然方法属性很多,但是我们要看经常使用的。

其中构造方法有两个,调用其中任何一个都可以实例化
UserDetails 实现类 User 类的实例。而三个参数的构造方法实际上也是调用 7 个参数的构造方法。

  • username:用户名
  • password:密码
  • authorities:用户具有的权限。此处不允许为null。

注意看一下:
此处的用户名应该是客户端传递过来的用户名。而密码应该是从数据库中查询出来的密码。Spring Security 会根据User中的password
和客户端传递过来的password
进行比较。如果相同则表示认证通过,如果不相同表示认证
据 User 中的 失败。

authorities 里面的权限对于后面学习授权是很有必要的,包含的所有内容为此用户具有的权限,如有里面没有 包含某个权限,而在做某个事情时必须包含某个权限则会出现 403。通常都是通过
AuthorityUtils.commaSeparatedStringToAuthorityList(“”) 来创建 authorities 集合对象的。参数是一个 字符串,多个权限使用逗号分隔。

3、方法参数

方法参数表示用户名。此值是客户端表单传递过来的数据。默认情况下必须叫username,否则无法接收。

4、异常

UsernameNotFoundException 用户名没有发现异常。在 loadUserByUsername 中是需要通过自己的逻辑从数据 库中取值的。如果通过用户名没有查询到对应的数据,应该抛出 UsernameNotFoundException ,系统就知道用户名 没有查询到。

到此这篇关于SpringSecurity之UserDetailsService详解的文章就介绍到这了,更多相关SpringSecurity UserDetailsService内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring依赖注入和控制反转详情

    Spring依赖注入和控制反转详情

    这篇文章主要介绍了Spring依赖注入和控制反转详情,控制反转是面向对象编程中使用的术语,通过该术语,对象或对象集的控制权被赋予框架或由框架提供的容器。下文更多相关内容需要的小伙伴可以参考一下
    2022-05-05
  • 使用BufferedReader读取TXT文件中数值,并输出最大值

    使用BufferedReader读取TXT文件中数值,并输出最大值

    这篇文章主要介绍了使用BufferedReader读取TXT文件中数值,并输出最大值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java中Integer.equals的用法与特殊情况

    Java中Integer.equals的用法与特殊情况

    Java中Integer.equals比较数值而非对象地址,自动装箱处理int参数,-128~127范围内使用==安全,超出范围或null需用Objects.equals,compareTo用于大小比较,equals仅判断相等性,注意类型不匹配会导致false
    2025-07-07
  • Java之网络编程案例讲解

    Java之网络编程案例讲解

    这篇文章主要介绍了Java之网络编程案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Springboot通用mapper和mybatis-generator代码示例

    Springboot通用mapper和mybatis-generator代码示例

    这篇文章主要介绍了Springboot通用mapper和mybatis-generator代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Java 在PPT中创建散点图的实现示例

    Java 在PPT中创建散点图的实现示例

    本文将以Java代码示例展示如何在PPT幻灯片中创建散点图表。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • SpringBoot+JavaMailSender实现腾讯企业邮箱配置

    SpringBoot+JavaMailSender实现腾讯企业邮箱配置

    这篇文章主要介绍了SpringBoot+JavaMailSender实现腾讯企业邮箱配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java8 Comparator: 列表排序的深入讲解

    Java8 Comparator: 列表排序的深入讲解

    这篇文章主要给大家介绍了关于Java 8 Comparator: 列表排序的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Mybatis自动创建表和更新表结构

    Mybatis自动创建表和更新表结构

    这篇文章主要介绍了Mybatis自动创建表和更新表结构的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android中PreferenceFragment的使用详解

    Android中PreferenceFragment的使用详解

    本文主要介绍了Android中PreferenceFragment的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论