Spring Boot是否默认过滤请求中password字段?如何针对端点禁用?
问题根源:不符合JavaBean规范的Setter方法导致password字段无法绑定
这不是Spring默认过滤password字段的问题,核心原因是你的Account类中setPassword方法不符合JavaBean的Setter规范,导致Jackson(Spring默认的JSON序列化/反序列化库)无法正确完成字段绑定。
问题定位
查看你的Account类代码:
public String setPassword(String password) { return password; }
标准的JavaBean Setter方法需要满足两个条件:
- 返回值为
void - 方法内部对类的成员变量完成赋值
你的setPassword方法不仅没有给this.password赋值,还返回了String类型,Jackson无法识别这是password字段的Setter方法,自然无法将请求中的password值绑定到对象上,最终导致该字段为null。
修复方案
将Account类中的setPassword修改为标准Setter:
public void setPassword(String password) { this.password = password; }
同时,你的confirmPassword和test字段目前仅为public成员变量,没有对应的Setter方法,虽然Jackson可以直接访问public字段,但更规范的做法是将成员变量设为private,并添加标准的Getter/Setter方法,避免后续出现类似问题。
额外说明
- Spring本身不会默认过滤
password请求字段,你之前了解到的相关内容大概率是Spring Security中对密码的加密、参数隐藏等安全处理逻辑,和本次请求参数绑定无关。 - 推荐使用Lombok的
@Data注解自动生成符合规范的Getter/Setter方法,减少手动编写代码的错误率。
内容的提问来源于stack exchange,提问作者floriank
相关产品推荐
相关产品推荐

