Files
mokeegateway/memory/session-20260620-2.md
2026-07-15 16:13:27 +08:00

2.8 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
session-20260620-2 2026-06-20 第2次会话 — 修复TokenAuthFilter Redis Key前缀遗漏导致登录后Token找不到会话
type date sessionNumber startTime endTime
session 2026-06-20 2 2026-06-20T10:45:00+08:00 2026-06-20T10:55:00+08:00

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
  • 数据流追踪:
    1. 登录 → Auth 服务写入 GATEWAY:auth:token:43a705df-...
    2. 校验 → Gateway 查找 auth:token:43a705df-... ✗ (缺少 GATEWAY: 前缀)
  • 根因: 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