forked from baskbuddy/zhangshun
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.8 KiB
2.8 KiB
R01-A5 第五批请求上下文收束实施报告
实施日期:2026-09-17
分支:refactor/r01-structure-performance
基线 HEAD:0226977063243fce101e3f6c8dcf66492d306ef7
结论
R01-A5 第五批请求身份与 requestId 收束已完成自动化验证,待独立代码复验。
修改范围
本批仅修改以下 8 个 Controller:
CandidateScoringGovernanceControllerInterviewScoreControllerFavoriteControllerAdminReviewControllerAdminReviewReplyControllerCompanyReviewManagementControllerJobReviewControllerStudentReviewWeightController
每个 Controller 均执行相同的受控迁移:
- 构造器注入既有
CurrentUserAccessor与RequestIdAccessor; - 身份统一调用
currentUserAccessor.requireUserId(); - requestId 统一调用
requestIdAccessor.get(request); - 删除本地身份解析方法和 requestId 读取方法;
- 保留原有角色、资源归属、Service 参数、DTO 和响应结构。
JobReviewController.parseIds 是岗位 ID 业务参数解析,予以保留。
静态门禁
8 个目标文件对以下模式均为零命中:
SecurityContextHolder/Authentication/anonymousUser;- 身份
Long.valueOf(auth.getName()); resolveUserId/getRequestId/ 私有requestId(...);- 原始
X-Request-Idheader 读取; - 可选注入、
ObjectProvider或手工new Accessor()回退。
新增验证
新增 R01A5RequestContextMigrationIntegrationTest,使用真实 Spring Security 与 MVC 映射:
- 8 个 Controller 各选一个真实端点;
- 非法主体覆盖
anonymousUser、非数字、20 位 Long 溢出、0、负数; - 所有组合必须返回 HTTP 401,且响应不含异常类、堆栈或非法主体;
- 合法主体下验证规范化 requestId 的响应头与响应体同源。
定向与关联测试:90/90,Failures=0,Errors=0,Skipped=0。
全量验证
mvn clean verify:BUILD SUCCESS,2245/2245,Failures=0,Errors=0,Skipped=0;python docs/verify_openapi.py:176 paths / 214 operations,All checks passed;- V1-V45 无差异;
docs/openapi-rc.json无差异;git diff --check无空白错误,仅既有 LF/CRLF 提示。
全仓剩余
完成 A5 后:
- 身份解析共 4 个文件:基础设施 3 个,业务 Controller 仅
FairnessMonitoringController1 个; - requestId 入口共 11 个文件:基础设施/非业务入口 6 个,业务 Controller 5 个;
- 最终 A6 业务白名单为
FairnessMonitoringController、ApiController、AuthController、SystemController、JobController。
边界
- 未新增或修改 Flyway、ErrorCode、接口、DTO、表、索引或依赖;
- 未修改评分、申诉、面试评分、岗位收藏或评价业务规则;
- 未暂存、未提交、未推送;
- 未删除或移动历史未跟踪文件;
- 未进入 A6。