# R01-A5 第五批请求上下文收束实施报告 实施日期:2026-09-17 分支:`refactor/r01-structure-performance` 基线 HEAD:`0226977063243fce101e3f6c8dcf66492d306ef7` ## 结论 R01-A5 第五批请求身份与 requestId 收束已完成自动化验证,待独立代码复验。 ## 修改范围 本批仅修改以下 8 个 Controller: 1. `CandidateScoringGovernanceController` 2. `InterviewScoreController` 3. `FavoriteController` 4. `AdminReviewController` 5. `AdminReviewReplyController` 6. `CompanyReviewManagementController` 7. `JobReviewController` 8. `StudentReviewWeightController` 每个 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-Id` header 读取; - 可选注入、`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 仅 `FairnessMonitoringController` 1 个; - requestId 入口共 11 个文件:基础设施/非业务入口 6 个,业务 Controller 5 个; - 最终 A6 业务白名单为 `FairnessMonitoringController`、`ApiController`、`AuthController`、`SystemController`、`JobController`。 ## 边界 - 未新增或修改 Flyway、ErrorCode、接口、DTO、表、索引或依赖; - 未修改评分、申诉、面试评分、岗位收藏或评价业务规则; - 未暂存、未提交、未推送; - 未删除或移动历史未跟踪文件; - 未进入 A6。