scripts/contract/compare.mjs 对目标服务重放全部端点,与 Java 录制的快照逐字段比对,差异精确到字段路径。 此前每验证一个模块都要临时写一次比对脚本,现在一条命令即可, 且比人工核对更细——首次运行就发现了下面这个人工绝对会漏的问题。 两条比对规则,区分对待: - 对象字段顺序:排序后比较。消费方按名字取值,顺序无语义;且 Java 的 Map.of 迭代顺序取决于 JVM 启动时的随机哈希种子,实测重启前后会变,本就不是稳定契约。 - 数组元素顺序:严格保持。顺序即业务语义(列表排序、分页), 若一并排序,"本该倒序却写成正序"这类真缺陷会被掩盖,比对就从保障变成掩护。 响应头差异用显式白名单放行,理由写在代码里: - content-type:Java 自身也不统一,部分接口带 charset 部分不带,前端无感 - set-cookie:Java 在已认证 GET 后下发删除 CSRF cookie 的指令,属框架副作用,不予复现 修复:NestJS 缺少 Spring Security 默认的安全响应头 X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、 Cache-Control/Pragma/Expires 六个头此前完全缺失。 这些头由 Spring Security 开箱提供,换框架后不会自动出现, 缺了功能完全正常、任何人工测试都发现不了,但防点击劫持、防 MIME 嗅探、 防敏感数据被缓存三道防线同时消失。补齐后认证端点比对 3/3 一致。 当前全量比对:9 项一致、22 项待实现(尚未迁移的五个业务模块,均返回 404)。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| all-exceptions.filter.ts | Loading commit data... | |
| api-response.interceptor.ts | Loading commit data... | |
| api-response.ts | Loading commit data... | |
| business.exception.ts | Loading commit data... | |
| datetime.ts | Loading commit data... | |
| prisma.module.ts | Loading commit data... | |
| prisma.service.ts | Loading commit data... | |
| security-headers.middleware.ts | Loading commit data... | |
| serialize.ts | Loading commit data... |