如何防止Spring请求体键重复以提升应用安全性?
处理Spring Boot中JSON请求体重复键的问题
当请求体存在重复JSON键时,Spring Boot默认使用的Jackson解析器会保留最后一个键的值,这和你在Postman里看到的行为一致。要阻止这种情况,你可以通过配置Jackson让它遇到重复键时直接抛出异常,具体方案如下:
开启Jackson的重复键校验特性
Spring Boot允许你自定义ObjectMapper实例,开启FAIL_ON_DUPLICATE_PROPERTIES特性。这样当请求体中出现重复属性时,Jackson会抛出JsonMappingException,Spring MVC会自动返回400 Bad Request响应,拒绝该请求。配置代码示例:
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); // 开启重复键校验,遇到重复属性直接抛出异常 mapper.enable(DeserializationFeature.FAIL_ON_DUPLICATE_PROPERTIES); return mapper; } }验证效果
当请求体包含重复键时,接口会返回类似如下的错误响应:{ "timestamp": "2024-05-20T12:34:56.789+00:00", "status": 400, "error": "Bad Request", "message": "Duplicate field 'firstName'", "path": "/your-api-endpoint" }
需要注意的是,Spring Boot并没有默认开启这个校验,因为JSON官方规范并未明确禁止重复键,不同解析器的处理行为可能存在差异。通过上述配置,你可以强化接口的安全性,避免因重复键导致的意外数据覆盖。
内容的提问来源于stack exchange,提问作者milo
相关产品推荐
相关产品推荐

