Files
xiaotutongxue/.gitignore
T
lovife b9373d6ebd fix(config): 本地私有配置改用 profile 机制(spring.config.import 优先级不够)
起因:用户把七牛 AK/SK 填进了 application-dev.yml(**会提交的文件**)。
已把密钥挪到 jar 外的 backend/application-local.yml(gitignore),
并把 dev 文件还原成空占位符 —— 确认过待提交差异里没有密钥。

⚠️ 排查中发现一个**沉默的坑**:一开始用
  spring.config.import: optional:file:./application-local.yml
加载本地密钥,结果**启动正常、日志不报错、但配的 provider 完全没生效**
(还是本地磁盘)。三步定位:
  ① 确认 YAML 合法(结构/编码/缩进都对)→ 不是文件问题
  ② 换 --spring.config.additional-location=file:./... → **生效了**
     → 文件与内容没问题,问题在 import 这条路
  ③ 把 import 改成**非可选 + 指向不存在的文件** → 启动失败并报
     "Config data resource ... does not exist"
     → 证明 import **确实被处理了**,是**优先级**问题

根因:spring.config.import 导入的文件排在 **profile 文件之后(优先级更低)**,
于是 application-dev.yml 里的 storage.provider 把导入文件里的 provider: qiniu
盖掉了 —— 而这一切没有任何报错。

修法:改用标准机制 —— 文件恢复成 profile 名 application-local.yml,
application.yml 里加 spring.profiles.include: local。
profile 文件后加载、优先级更高。启动日志现在打印
  The following 2 profiles are active: "local", "dev"
那个坑已写进 application.yml 的注释里,免得后人再踩。

教训:**"配置了但没生效、且不报错"是最难查的一类问题。**
判断某个配置机制到底有没有被执行,有个通用办法:
**把它改成一个必然会失败的值** —— 如果照样跑起来,说明它根本没被处理。

⛔ 仍阻塞:用户填的 AK/SK **验证无效**(七牛 401 bad token)。
两个互相独立的签名实现都失败,所以不是代码问题:
  ① 七牛官方 SDK 的 Auth.uploadToken(自检走的就是它)
  ② 手写的管理 API 签名(GET https://rs.qiniu.com/buckets)
线索:AK 40 字符正常、**SK 41 字符**(七牛的 AK/SK 都是 40 字符的 URL 安全 base64);
但逐字符试"去掉首/尾字符"三种组合都被拒 → 不是收尾多一个字符。
需要用户到七牛控制台 → 密钥管理重新完整复制一对。

为不阻塞本地开发,application-local.yml 里 provider 先留 local(密钥保留着,
换成有效的之后去掉一行注释即可)。回归:e2e-m3-file 29/29、m3-submit 31/31。
2026-09-29 14:38:37 +08:00

66 lines
1.5 KiB
Plaintext
Raw 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.
# ── IDE ──────────────────────────────
.idea/
*.iml
.vscode/
*.swp
# ── Java / Maven ─────────────────────
target/
*.class
*.jar
!**/gradle/wrapper/*.jar
.mvn/wrapper/maven-wrapper.jar
# ── Node / 前端 ───────────────────────
node_modules/
dist/
dist-ssr/
unpackage/
.pnpm-store/
*.tsbuildinfo
# ── 环境与密钥(禁止入库)────────────
.env
.env.local
.env.*.local
*.pem
*.key
*.p12
keystore/
# ── 日志与运行时 ──────────────────────
logs/
*.log
npm-debug.log*
yarn-error.log*
# ── 构建产物 ──────────────────────────
build/
out/
*.tmp
*.bak
# ── Python(scripts/ 下的验收与工具脚本)──
# 跑 python -m py_compile 或导入脚本时会生成字节码,不该入库
__pycache__/
*.py[cod]
# ── 上传/导出的本地测试数据 ───────────
/data/
/upload/
/export/
*.zip
# ── OS ───────────────────────────────
.DS_Store
Thumbs.db
desktop.ini
# 运行时上传的文件(材料原图/规范件)—— 是数据不是代码,绝不入库
backend/data/
# 本地私有配置(云存储密钥等)—— 只提交 .example 模板
application-local.yml
# 本地私有配置(云存储密钥等)—— 只提交 .example 模板
xt-local.yml