Spring Security认证流程

这边项目在用户登录的时会调用

复制代码
private final AuthenticationManager authenticationManager;
authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(
                loginCommand.getUsername(), decryptPassword));

就有疑问,理论上应该查询数据库进行判断的,它是怎么进行的这个流程

AuthenticationManager

是 Spring Security 中的核心接口,负责处理认证请求。它的默认实现是 ProviderManager,内部会遍历一组 AuthenticationProvider 来完成认证。

认证逻辑的实际位置

是在我的UserDetailsServiceImpl类 ,继承了这个Spring Securtiy包下面的 UserDetailsService

复制代码
public interface UserDetailsService {
    UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}

我自己定义的UserDetailsServiceImpl类

复制代码
public class UserDetailsServiceImpl implements UserDetailsService

要实现接口方法 loadUserByUsername

复制代码
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
}

1.authenticationManager.authenticate() 最终会调用 UserDetailsServiceImpl.loadUserByUsername() 方法。
2.在 loadUserByUsername() 方法中,会从数据库中加载用户信息(包括用户名、密码等),并封装成 UserDetails 对象返回。
3.Spring Security 会自动比对用户输入的密码与数据库中存储的密码是否一致。

相关推荐
唐青枫1 小时前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
小满8782 小时前
5.Mysql事务隔离级别与锁机制
mysql
狼爷17 小时前
吃透 Java Function 接口,搞定 99% 的 Stream 场景
java·函数式编程
元Y亨H20 小时前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
祎雪双十Gy21 小时前
从 DataX 的配置加载说起:我用 FastJson2 做了一个轻量级动态配置管理库
java·后端
小锋java123421 小时前
分享一套锋哥原创的SpringBoot4+Vue3宠物领养网站系统
java
考虑考虑1 天前
Java实现hmacsha1加密算法
java·后端·java ee
掉鱼的猫1 天前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
plainGeekDev1 天前
广播接收器 → Flow + Lifecycle
android·java·kotlin
plainGeekDev1 天前
EventBus → SharedFlow
android·java·kotlin