# 02 — 全局 @InitBinder mass assignment 防御 **What to build:** 一个 `@ControllerAdvice` + `@InitBinder`,调用 `dataBinder.setDisallowedFields(...)` 全局 strip 掉服务端裁定字段:`createTime`、`updateTime`、`creatorId`、`updaterId`、`deleted`、`builtin`。客户端在表单里提交这些字段会被静默忽略,不绑到 DTO 上。Spring 对目标类上不存在的字段会静默跳过,所以全局列表不会报错。这是 ADR-0017 Route A(DTO 双向)的安全替代——DTO 上有 `createTime`/`updateTime`(出参展示用),但绑定器拒绝从表单填入。 **Blocked by:** None — 可立即开始(与 01 并行) **Status:** ready-for-agent - [ ] 创建 `@ControllerAdvice` 类,含 `@InitBinder` 方法 - [ ] `setDisallowedFields` 列表包含:`createTime`、`updateTime`、`creatorId`、`updaterId`、`deleted`、`builtin` - [ ] 测试:提交包含 `createTime` 的表单到任意 form-bound DTO,DTO 上 `createTime` 为 null(被 strip) - [ ] 测试:提交包含 `builtin=true` 的表单,DTO 上 `builtin` 为 null(被 strip) - [ ] 测试:不包含这些字段的正常表单提交不受影响 - [ ] 项目编译通过