目录
登录流程总梳理编辑
一.请求入口:SysLoginController
二.核心登录逻辑:SysLoginService
1.验证码校验核心实现:
2.登录前置校验核心实现:
3.用户验证核心实现:
4.更新登录信息:
5.生成token:
三.登录成功后的访问
1.前端请求时携带token:
2.token验证:
3.token续期:
登录流程总梳理
![]()
一.请求入口:SysLoginController
前端登录JSON 数据接收
二.核心登录逻辑:SysLoginService![]()
可细分为以下五步来看
1.验证码校验核心实现:
![]()
1.前端把 {uuid, code, username, password} 发到/login
2.后端调validateCaptcha(username, code, uuid)
3.验证码通过,才会继续走 “用户名+密码” 认证链。
4.任何一步失败,都通过AsyncManager异步写一条登录日志到数据库,并抛出对应异常,由全局异常处理器转换成 JSON 返给前端。
2.登录前置校验核心实现:
执行顺序:本方法 → 后续数据库查询与密码校验。任何分支throw都会由全局异常处理器统一封装成{code:500, msg:"对应提示"}返回,同时异步写入sys_logininfor失败日志。
3.用户验证核心实现:
AuthenticationManager调用UserDetailsServiceImpl.loadUserByUsername()从数据库获取用户信息。
4.更新登录信息:
异步记成功日志 + 更新用户最后一次登录信息。当前登录 IP 与当前时间写回
sys_user表对应字段
5.生成token:
![]()
生成 UUID 作为 token,设置用户代理信息(IP、浏览器、系统等),缓存LoginUser到 Redis(key:LOGIN_TOKEN_KEY + token)
三.登录成功后的访问
上面后端获取了token接下来,每次请求携带这个 Token(放在请求头 Authorization 中)后,系统会进行一系列后端处理。
1.前端请求时携带token:![]()
后端在JwtAuthenticationTokenFilter.java中有一个过滤器来验证 Token: (这个过滤器把“无状态 JWT”转成“有状态 Spring Security 认证对象”,并负责续期、校验、刷新上下文,是整个系统权限体系的入口闸门。)
其中SecurityContext是 Spring Security 的核心线程级容器,当前请求“谁已登录、拥有哪些权限” 全部放在它里面;一次请求生命周期内,任何地方只要SecurityContextHolder.getContext()就能拿到这套信息,不必再查数据库。
2.token验证:
在TokenService.java中先获取用户登录信息
解析 Token,拿出里面的 UUID。
用 UUID 作为 key,到 Redis 里查 LoginUser 对象。
如果 Redis 找不到(说明登录过期或被清理),则无法通过认。
3.token续期:
续期保证了活跃用户保持登录与闲置账号快速失效。在以上操作后后续前端访问接口时,会携带 Token,调用
getInfo()或getRouters()获取用户信息和路由菜单。
登录功能代码调用泳道图