Files
nginxserver/memory/session-20260613-1.md
2026-07-16 13:03:11 +08:00

5.1 KiB
Raw Permalink Blame History

session_id, date, summary, status
session_id date summary status
20260613-1 2026-06-13 Mokee Gateway统一登录接入 - 全栈改造 + 多个Bug修复 进行中 - Widget未显示其他功能正常

Mokee Gateway 统一登录接入改造

系统编码: nginxServer,网关: https://gw.server.zgitm.com,登录: https://login.user.zgitm.com

最终改动的文件(汇总)

前端 (9 files)

文件 操作 说明
.env.development VITE_GATEWAY_URL / VITE_LOGIN_URL / VITE_SYSTEM_CODE
.env.production 同上
index.html 引入 Widget CSSJS 改在 main.js 动态加载)
src/main.js 重写 bootstrap() 鉴权→拉菜单→挂载→加载 Widget
src/utils/request.js 新增 网关 axios 实例,带 Token/X-System-Code兼容双 code 格式,错误消息提取
src/api/nginxApi.js 换新 request路径加 /api 前缀
src/router/index.js 重写 路由守卫,扁平路由注册,导出 menuTree
src/layout/MainLayout.vue 侧边栏从 menuTree 渲染支持目录层级ICON_MAP 字符串→组件映射Widget 占位
index.html Widget CSS已移除静态 JS改动态加载

后端 (5 files)

文件 操作 说明
config/CorsConfig.java 新增 allowedOriginPatterns("https://.zgitm.com","http://localhost:") + allowCredentials
context/UserContext.java 新增 ThreadLocal 工具类(修复 JDK 17 兼容:不用 getOrDefault
filter/UserContextFilter.java 新增 Servlet Filter 提取网关注入的 X-User-Id 等请求头
entity/ForwardingRule.java status 字段加 @TableLogic(value="1", delval="0")
entity/DnsZoneConfig.java status 字段加 @TableLogic(value="1", delval="0")
config/RestTemplateConfig.java 未改 保持原样Spring Boot 直连 Python API

控制器 (3 files)

文件 操作 说明
ForwardingRuleController.java 删除 @CrossOrigin(origins="*")CORS 统一由 CorsConfig 管
CertificateController.java 同上
DnsController.java 同上

配置 (1 file)

文件 操作 说明
application.yml 删除全局 logic-delete-field: status这是证书重复键Bug的根因

Python API (1 file)

文件 操作 说明
nginx-python-api/app.py 添加 before_request 中间件提取用户请求头到 Flask g未部署到服务器

SQL (1 file)

文件 操作 说明
sql/gateway_init.sql 新增 UUID 变量方式菜单Nginx代理管理→三个业务页面角色admin/user管理员admin_nginxServer

踩过的坑

1. @CrossOrigin(origins="*") + CorsConfig.allowCredentials(true) 冲突

  • 三个 Controller 原来有 @CrossOrigin(origins="*"),与全局 CorsConfig 的 allowCredentials(true) 合并后产生非法组合
  • 修复:删除三个 Controller 的 @CrossOriginCORS 统一由 CorsConfig 管理

2. 网关菜单返回字段和前端预期不一致

  • 网关实际返回:{path, name, component, meta:{title,icon}, children}component="Layout" 表示目录
  • 前端最初判断 menuType/menu_name 等字段,全部对不上
  • 修复addDynamicRoutes() 改为判断 component==='Layout',路由扁平注册到 /,侧边栏从 menuTree 渲染

3. Widget process is not defined

  • Widget JS 内部引用了 process.env,浏览器环境无此全局变量
  • 修复main.js 中加载 Widget 前加 window.process = { env: {} }

4. 路由嵌套导致菜单不显示

  • 最初 addDynamicRoutes 把页面路由嵌套在 /nginx/nginx-forwardingredirect /nginx-forwarding 找不到
  • 修复:页面路由全部扁平注册到 /,侧边栏层级单独从 menuTree 渲染

5. 证书列表查询触发 INSERT 重复键 — 全局 logic-delete-field 误伤

  • 根因application.yml 全局 logic-delete-field: statusMyBatis-Plus 给所有实体加 AND status = 1
  • Certificate.status 是 String "active"WHERE status = 1 永远不成立 → selectOne 返回 null → 走 INSERT → 重复键
  • ForwardingRule.statusDnsZoneConfig.status 是 Integer 0/1不受影响
  • 修复:删除全局 logic-delete-field在 ForwardingRule 和 DnsZoneConfig 的 status 字段加 @TableLogic(value="1", delval="0")

6. 前端错误消息丢失

  • request.js 错误拦截器直接透传 axios error前端拿到 "Request failed with status code 500"
  • 旧代码从 error.response.data.message 提取后端实际消息
  • 修复:错误拦截器追加 new Error(error.response?.data?.message || error.message || '网络错误')

7. Widget 动态加载时机

  • Widget 脚本在 index.html 同步加载时 Vue 未渲染,找不到 #mokee-user-chip
  • 移到 main.jsapp.mount() 之后动态加载
  • 当前状态Widget 仍未显示,待排查

待解决

  • Widget 用户头像组件不显示(右上角)
  • Python API app.py 中间件需部署到 10.1.1.160