登录 Token 生成源码解析
📄 登录 token 生成源码解析 _ PIGCLOUD
商业版
生态🔥
快速上手
前端部分
功能使用
后端部分
- 📄 数据库字段文档说明
- 📄 登录 token 生成源码解析
- 📄 请求校验 token 源码解析
- 📄 HTTP客户端获取 token
- 📄 feign 使用基础
- 📄 Feign 调用与令牌传递👍
- 📄 @Inner 注解使用及原理 👍
- 📄 社交短信登录原理
- 📄 接口直接对外暴露
- 📄 前端密码加密处理
- 📄 验证码配置及开关
- 📄 登录短信验证码发送
- 📄 信息推送功能使用
- 📄 配置文件加载规则
- 📄 全局异常处理
- 📄 异常国际化处理
- 📄 配置文件动态刷新
- 📄 网关动态路由原理
- 📄 服务配置 cors 跨域
- 📄 feign 自动降级功能
- 📄 配置文件加解密
- 📄 logback 日志输出配置
- 📄 @SysLog 日志注解使用
- 📄 监控服务常见功能使用
- 📄 Druid 分布式 SQL 监控使用
- 📄 MyBatis-Plus连表查询
扩展必看
生产部署
社区分享
更新日志
📄 登录 token 生成源码解析
pigcloud 2023/1/8
# 环境说明
| 依赖 | 版本 |
|---|---|
| PIGX | 5.6 |
| 架构模式 | 微服务 |

# 1. 登录页面
src/views/login/component/password.vue 此文件是前端账号密码登录的入口文件。此文件涉及页面验证码获取逻辑,行为验证码基于AJ-Captcha (opens new window) 实现。
# ① 密码登录页面的逻辑

# ② 前端登录成功后跳转逻辑

# 2. 前端报文加密
1 | password明文:123456 |
为了保证前端提交登录信息(尤其是密码字段)带后台验证过程中被抓包破解密码,PIGX 框架对登录报文进行了对称加密处理详细说明参考: 前端报文加密的业务。

前端提供简单的 AES 对称加密算法,注意 key 和后端网关配置相同,这里打包混淆后,相对安全。

# 3. 网关请求转发
==网关中最重要的功能是路由转发,根据请求前缀匹配到对应服务。== 比如 所有以 /auth 开头的请求会自动转发至 pigx-auth 服务的接口处理。
以下为:sys_route_conf 表定义的路由规则

在 PigxRequestGlobalFilter 过滤器中另外一个重要的功能就是截取路由前缀
1 | 例如: http://127.0.0.1:9999/auth/oauth2/token 转发到 pigx-auth 的请求路径自动截取 前缀变成 |

# 4. 验证码校验处理

pigx-auth 认证中心在接收到网关转发的请求后,会通过 ValidateCodeFilter 对验证码(图形、短信)等进行校验
# 5. 前端请求密文解密
1 | password密文:JFat0Zdc |
pigx-auth 在处理完验证码判断逻辑后,PasswordDecoderFilter 针对 /oauth2/token 请求会进行前端密码解密。
# 6. auth 模块详解

登录请求报文
1 | POST /auth/oauth2/token?grant_type=password&scope=server HTTP/1.1 |
# ① 客户端认证

如上图在登录请求中会携带 Basic base64(clientId:clientSecret), 那么首先 OAuth2ClientAuthenticationFilter 会通过调用 RegisteredClientRepository (数据库存储) 来判断传入的客户端是否正确

# ② 正式接收登录请求
OAuth2TokenEndpointFilter 会接收通过上文 OAuth2ClientAuthenticationFilter 客户端认证的请求

# ③ 组装认证对象
AuthenticationConverter 会根据请求中的参数和授权类型组装成对应的授权认证对象

# ④ 登录认证对象
AuthenticationToken
1 | public class XXXAuthenticationToken extends OAuth2ResourceOwnerBaseAuthenticationToken { |

# ⑤ 授权认证调用

# ⑥ 核心认证逻辑

# 多用户体系匹配 UserDetailsService

# 密码匹配校验

# 用户状态校验

# ⑦ 用户查询逻辑
用户查询逻辑的多种实现形式
- 解耦: 通过 feign 查询其他系统获取并组装成
UserDetails - 简单: 认证中心直接查询 DB 并组装成
UserDetails

# ⑧ 密码校验逻辑


1 | 默认支持加密方式如下: |
1 | return new UserDetails(user.getUsername(),"{bcrypt}"+"数据库存储的密文"); |
# ⑨ 生成 OAuth2AccessToken

# ⑩Token 存储持久化

当前 SAS 仅支持 JDBC 和内存 ,PIGX 扩展支持 Redis 实现

# ⑪ 登录成功事件处理
基于 SpringEvent 事件处理,可以在这里做更多的处理 日志、个性化等处理逻辑

# ⑫ 请求结果输出 Token
1 | private void sendAccessTokenResponse(HttpServletRequest request, HttpServletResponse response, |
定义具体的输出返回格式等逻辑

- 环境说明
- 1. 登录页面
- ① 密码登录页面的逻辑
- ② 前端登录成功后跳转逻辑
- 2. 前端报文加密
- 3. 网关请求转发
- 4. 验证码校验处理
- 5. 前端请求密文解密
- 6. auth 模块详解
- ① 客户端认证
- ② 正式接收登录请求
- ③ 组装认证对象
- ④ 登录认证对象
- ⑤ 授权认证调用
- ⑥ 核心认证逻辑
- ⑦ 用户查询逻辑
- ⑧ 密码校验逻辑
- ⑨ 生成 OAuth2AccessToken
- ⑩Token 存储持久化
- ⑪ 登录成功事件处理
- ⑫ 请求结果输出 Token
内容勘误反馈

- 标题: 登录 Token 生成源码解析
- 作者: PIGCLOUD
- 创建于 : 2024-01-01 00:00:00
- 更新于 : 2025-09-22 14:27:28
- 链接: https://anime-blog.52lin.site/📄 登录 token 生成源码解析 _ PIGCLOUD/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。