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 会自动比对用户输入的密码与数据库中存储的密码是否一致。

相关推荐
zzzzls~14 小时前
Python 工程化: 用 Copier 打造“自我进化“的项目脚手架
开发语言·python·copier
言慢行善14 小时前
sqlserver模糊查询问题
java·数据库·sqlserver
韶博雅14 小时前
emcc24ai
开发语言·数据库·python
专吃海绵宝宝菠萝屋的派大星14 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
yongui4783414 小时前
C# 与三菱PLC通讯解决方案
开发语言·c#
2501_9333295514 小时前
技术架构深度解析:Infoseek舆情监测系统的全链路设计与GEO时代的技术实践
开发语言·人工智能·分布式·架构
大数据新鸟14 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z14 小时前
常见的限流算法和实现原理
java·开发语言
喵了几个咪14 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
凭君语未可14 小时前
Java 中的实现类是什么
java·开发语言