2.8 KiB
2.8 KiB
name, description, metadata
| name | description | metadata | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| session-20260620-2 | 2026-06-20 第2次会话 — 修复TokenAuthFilter Redis Key前缀遗漏导致登录后Token找不到会话 |
|
2026-06-20 第2次会话
会话摘要
修复 TokenAuthFilter 中 Redis Key 缺少 GATEWAY: 前缀的 bug。上次会话给 RedisUtil 加了统一前缀机制后,Auth/Admin 服务都改为使用 RedisUtil.key() 生成 key,但 Gateway 的 TokenAuthFilter 被遗漏,导致登录后 Token 校验时找不到 Redis 会话。
关键操作
TokenAuthFilter Redis Key 前缀修复
- 做了什么:
TokenAuthFilter.java中两处 Redis key 改为RedisUtil.key("auth:token:" + tokenId)和RedisUtil.key("open:token:" + tokenId) - 原因: 上次会话(session-1)引入
RedisUtil.KEY_PREFIX = "GATEWAY:"和key()方法后,Auth 服务写入 key 是GATEWAY:auth:token:xxx,但 Gateway 读取时直接拼"auth:token:" + tokenId(无前缀),导致永远找不到。这是一个重构遗漏 bug。 - 结果: 修复后 Gateway 正确使用
RedisUtil.key()生成带前缀的 key,与 Auth/Admin 服务写入的 key 一致 - 涉及文件:
TokenAuthFilter.java(第115行和第183行)
问题诊断过程
- 日志现象:
Token 对应 Redis 会话不存在 - tokenId: 43a705df-fdc7-4b97-b5eb-605d3c081897 - 数据流追踪:
- 登录 → Auth 服务写入
GATEWAY:auth:token:43a705df-...✓ - 校验 → Gateway 查找
auth:token:43a705df-...✗ (缺少 GATEWAY: 前缀)
- 登录 → Auth 服务写入
- 根因:
RedisUtil.key()自动添加GATEWAY:前缀,但 TokenAuthFilter 没使用此方法
重要信息
- Redis 前缀机制详情见 session-20260620-1 的 "Redis Key 加统一前缀 GATEWAY:" 章节
- Auth 服务(9001)、Admin 服务(9002)、Gateway(9000) 三个服务共享同一个 Redis 实例
- 所有 Redis key 操作都必须通过
RedisUtil.key()方法,不能直接拼字符串
待处理
- 重新编译部署 Gateway 服务使修复生效 (10:54 已部署到 10.1.1.170 Docker 容器 mokeegateway-mokee-gateway-gateway)
- 验证登录后 Token 校验正常通过(用户自行测试)
部署记录
- 服务器: 10.1.1.170(内网)
- 容器名: mokeegateway-mokee-gateway-gateway
- 容器 ID: 09bc559da896
- 镜像: harbor.zgitm.com/mokee/mokee-mokeegateway-mokee-gateway-gateway:v78.20260620102948
- 部署方式: SCP JAR → docker cp 替换 /app/app.jar → docker restart
- 启动耗时: 约 5.5 秒
- 部署时间: 2026-06-20 10:54
新规则
- 部署 170 须用户授权: 后续没有用户明确要求,不能擅自部署到 10.1.1.170(生产环境)。deploy-approval-required