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

相关推荐
Eason_LYC2 分钟前
【GetShell 实战】CVE-2026-34486 Tomcat 加密拦截器绕过:从漏洞验证到反弹 Shell 全流程
java·渗透测试·tomcat·java反序列化·rce·远程代码执行漏洞·cve-2026-34486
qq_2518364578 分钟前
基于java 税务管理系统设计与实现
java·开发语言
遇事不決洛必達8 分钟前
【数据库系列】本地映射云服务器Mysql的方法
服务器·数据库·mysql·定时任务
LuminousCPP10 分钟前
从零开始学 C++|系列开篇:从 C 到 C++ 的衔接之路
开发语言·c++·笔记
超梦dasgg12 分钟前
Java 生产环境分布式定时任务全解(实战落地版)
java·开发语言·分布式
Legendary_00812 分钟前
18-30W 便携照明设备 USB-C PD 升级:选型与设计要点
c语言·开发语言
破土士V17 分钟前
Java基础知识集合
java·开发语言
keykey6.18 分钟前
从感知机到神经网络:深度学习的起源
开发语言·人工智能·深度学习·机器学习
一只齐刘海的猫19 分钟前
【Leetcode】 接雨水
java·算法·leetcode
ZC跨境爬虫21 分钟前
跟着 MDN 学JavaScript day_5:技能测试——变量实战
java·开发语言·前端·javascript