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

134 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: session-20260612-1
description: 2026-06-12 会话 — 域名迁移mokee.com→zgitm.com、对外开放API、邮件服务、Token一次消费、文件管理、移动端适配
metadata:
type: session
date: 2026-06-12
sessionNumber: 1
startTime: 2026-06-12T00:00:00+08:00
---
# 2026-06-12 会话
## 会话摘要
域名从 mokee.com 迁移到 zgitm.com新增对外开放APIToken获取+邮件发送+一次消费新增邮件服务阿里企业邮箱新增Token日志和文件管理页面全员移动端适配修复多个关键Bug。
## 关键操作
### 一、域名迁移 mokee.com → zgitm.com
- `.env.production` 所有 URL 改为 `zgitm.com`
- `auth.ts` Cookie domain `.zgitm.com`(环境变量 `VITE_COOKIE_DOMAIN`
- `request.ts` Cookie domain 环境变量化
- `IntegrationDoc.vue` 备用 URL 更新
- **Bug**: Cookie domain 拼写错误 `.zgtim.com` → 修正为 `.zgitm.com`
- **Bug**: 登录不跳转 → Cookie domain 不匹配导致跨子域丢失
- Nginx 需要配置 `zgitm.com` 域名
### 二、对外开放 API
- **获取Token**: `POST /zgapi/v1/open/token` 只需传 `systemCode`
- **发送邮件**: `POST /zgapi/v1/open/email/send` 带 Bearer Token
- **一次消费**: 每个 Token 只能用一次Redis `open:token:{id}:consumed` 标记
- **30分钟有效期**
- 网关路由 `/zgapi/v1/open/` → admin
- TokenAuthFilter 放行 `/zgapi/v1/open/token`,其他 open 路径验证 open token
### 三、邮件服务
- SMTP: `smtp.qiye.aliyun.com:465` SSL, `admin@zgitm.com` / `mokee2016.`
- `EmailService.java` — 支持纯文本/HTML/附件,自动加 `[QA]`/`[PROD]` 前缀
- `EmailService.setFrom()` 设发件人(阿里企业邮箱要求发件人=认证账号)
- `EmailController.java` — 后台发送+记录+分页查询+Token日志
- `sys_email_log` 表 — 发送记录
- `@ConditionalOnBean` 问题 → 改为 `@Autowired(required = false)` + null检查
- **Bug**: 网关模块无 mail 配置导致 `@Value("${spring.mail.username}")` 启动失败 → 加默认值 `:}`
### 四、编码兼容
- **Bug**: 外部系统发 GBK 编码 JSON → Jackson 按 UTF-8 解析失败 `Invalid UTF-8 start byte 0xb2`
- 网关方案被拒绝 → 在 `OpenApiController` 手动读字节流,检测 GBK→UTF-8 转换
- API 文档要求 `Content-Type: application/json; charset=UTF-8`
### 五、文件管理
- 文件二进制存入数据库 `file_data LONGBLOB`
- `sys_file` 表结构调整QA+PROD
- `FileController.{id}/view` 端点输出图片流
- `FileList.vue` — 文件列表+上传+预览
- **Bug**: 图片显示 `ERR_BLOCKED_BY_ORB` → view 端点加 CORS 头
- **Bug**: 上传报 `MissingServletRequestPartException` → 网关 `spring.servlet.multipart.enabled=false`
- **Bug**: 图片 `<img>` 不带 Authorization 头 → TokenAuthFilter 支持 Cookie 读取 token
### 六、系统Bug全面检查
- A-1: `SysSystem``gatewayUrl` 字段 → 已添加
- D-1/D-2: LoginView/UserForm 错误静默吞没 → 加错误提示
- E-1: Cookie domain 硬编码 → 改为环境变量 `VITE_COOKIE_DOMAIN`
- F-1/F-2: assignRoles/assignMenus 不同步 Redis → 清除会话强制重登
- F-4: username 不同步 Redis → 已加同步
### 七、移动端适配全部22个Vue页面
- AdminLayout: 汉堡菜单 + 侧边栏滑出 + 遮罩
- 全局: 表格横向滚动、弹窗95vw、按钮缩小
- 所有列表页: 工具栏垂直排列、select/input 100%宽
- 所有表单页: max-width→100%、label缩到70px、按钮全宽
- 操作列: 去掉 `fixed="right"`,手机端只显示图标
### 八、Token日志
- `sys_open_token_log`QA+PROD
- `OpenTokenLogList.vue` — Token日志页面
- 菜单 "Token日志" 在日志审计下
- **Bug**: Token日志跳转登录 → 接口路径从 `/zgapi/v1/open/` 移到 `/zgapi/v1/admin/email/token-log/page`
### 九、API文档
- `docs/open-api-doc.md` — 独立API文档使用生产地址 `gw.server.zgitm.com`
- Java(Hutool)调用示例
- UTF-8 编码要求醒目提示
### 十、数据库变更QA+PROD均已执行
- `sys_file` 表重建file_data LONGBLOB + 新结构)
- `sys_file` 添加 `file_url` 兼容列
- `sys_open_token_log` 表创建
- `sys_email_log` 表创建
- 文件管理菜单+权限 `system:file:*`
- 邮件管理菜单+权限 `system:email:*`
- Token日志菜单+权限 `system:token:list`
## 修改文件清单
**后端**:
- `SysSystem.java` — 添加 gatewayUrl
- `SysFile.java` — 重构file_data
- `SysEmailLog.java` — 新建
- `SysOpenTokenLog.java` — 新建
- `EmailService.java` — 新建setFrom修复
- `JwtUtil.java` — generateOpenToken()
- `FileService.java` / `FileServiceImpl.java` — DB存储重写
- `FileController.java` — view端点+CORS
- `EmailController.java` — 发送+记录+Token日志
- `OpenApiController.java` — Token获取+邮件发送+编码兼容+自主解析tokenId
- `UserServiceImpl.java` — Redis同步+会话失效
- `RoleServiceImpl.java` — 角色变更会话失效
- `AuthServiceImpl.java` — 反向索引
- `TokenAuthFilter.java` — Cookie token + Open API认证
- `GatewayController.java` — open路由+multipart修复
- 8个 application-*.yml — 日志级别+邮件配置+multipart禁用
**前端**:
- `.env.production` / `.env.development` — VITE_COOKIE_DOMAIN
- `auth.ts` — Cookie domain环境变量化
- `request.ts` — Cookie domain环境变量化
- `LoginView.vue` — 错误提示+移动端
- `AdminLayout.vue` — fetchUserInfo+汉堡菜单+移动端+文件/邮件/Token菜单
- `PersonalView.vue` — 头像上传修复+移动端
- `FileList.vue` — 新建(上传+预览+移动端)
- `EmailList.vue` — 新建(发送+记录+移动端)
- `OpenTokenLogList.vue` — 新建(移动端)
- `IconPicker.vue` — 已上传图标标签页
- 15个页面 — 移动端@media适配
- 7个表格 — 去掉fixed="right"
- `router/index.ts` — 路由+标题favicon
- `global.css` — 全局移动端CSS
**文档**:
- `docs/open-api-doc.md` — 对外开放API文档
## 已知问题
- E-1: Cookie domain localhost开发不可用开发环境VITE_COOKIE_DOMAIN为空
- PROD Nginx 需要配 `zgitm.com` 域名
- Docker部署需要重新构建镜像