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

02 — 全局 @InitBinder mass assignment 防御

What to build: 一个 @ControllerAdvice + @InitBinder,调用 dataBinder.setDisallowedFields(...) 全局 strip 掉服务端裁定字段:createTimeupdateTimecreatorIdupdaterIddeletedbuiltin。客户端在表单里提交这些字段会被静默忽略,不绑到 DTO 上。Spring 对目标类上不存在的字段会静默跳过,所以全局列表不会报错。这是 ADR-0017 Route A(DTO 双向)的安全替代——DTO 上有 createTime/updateTime(出参展示用),但绑定器拒绝从表单填入。

Blocked by: None — 可立即开始(与 01 并行)

Status: resolved

  • 创建 @ControllerAdvice 类,含 @InitBinder 方法
  • setDisallowedFields 列表包含:createTimeupdateTimecreatorIdupdaterIddeletedbuiltin
  • 测试:提交包含 createTime 的表单到任意 form-bound DTO,DTO 上 createTime 为 null(被 strip)
  • 测试:提交包含 builtin=true 的表单,DTO 上 builtin 为 null(被 strip)
  • 测试:不包含这些字段的正常表单提交不受影响
  • 项目编译通过