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.
1.2 KiB
1.2 KiB
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: resolved
- 创建
@ControllerAdvice类,含@InitBinder方法 setDisallowedFields列表包含:createTime、updateTime、creatorId、updaterId、deleted、builtin- 测试:提交包含
createTime的表单到任意 form-bound DTO,DTO 上createTime为 null(被 strip) - 测试:提交包含
builtin=true的表单,DTO 上builtin为 null(被 strip) - 测试:不包含这些字段的正常表单提交不受影响
- 项目编译通过