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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于mybatisPlus yml配置方式

    关于mybatisPlus yml配置方式

    这篇文章主要介绍了mybatisPlus yml配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 基于MyBatis的数据持久化框架的使用详解

    基于MyBatis的数据持久化框架的使用详解

    Mybatis是一个优秀的开源、轻量级持久层框架,它对JDBC操作数据库的过程进行封装。本文将为大家讲解一下基于MyBatis的数据持久化框架的使用,感兴趣的可以了解一下
    2022-08-08
  • Java深入讲解AWT实现事件处理流程

    Java深入讲解AWT实现事件处理流程

    AWT的事件处理是一种委派式事件处理方式:普通组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理这个事件
    2022-04-04
  • 浅谈MyBatis执行SQL的两种方式

    浅谈MyBatis执行SQL的两种方式

    本文介绍MyBatis执行SQL语句的2种方式,主要是SqlSession和Mapper接口以及它们的区别,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • Java中Integer128的坑

    Java中Integer128的坑

    本文主要介绍了Java中Integer128的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • SpringCloud Gateway的熔断限流配置实现方法

    SpringCloud Gateway的熔断限流配置实现方法

    Spring Cloud Gateway支持通过配置熔断和限流机制来保证服务的稳定性和可用性,可通过Hystrix和Resilience4j两种方式实现。Hystrix通过注解和配置文件实现熔断限流,Resilience4j通过编程式配置实现
    2023-04-04
  • Java MQTT实战应用

    Java MQTT实战应用

    本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、SpringBoot整合方法与MQTTX工具下载链接,对java mqtt相关知识感兴趣的朋友一起看看吧
    2025-06-06
  • 解决java文件流处理异常 mark/reset not supported问题

    解决java文件流处理异常 mark/reset not supported问题

    这篇文章主要介绍了解决java文件流处理异常 mark/reset not supported问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 二代身份证验证示例

    二代身份证验证示例

    这篇文章主要介绍了二代身份证验证示例,需要的朋友可以参考下
    2014-02-02
  • DTD验证xml格式的三种方式详解

    DTD验证xml格式的三种方式详解

    这篇文章主要介绍了DTD验证xml格式的三种方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论