如何在 Spring Boot 中明确检查请求内容类型是不是与实际内容匹配?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中明确检查请求内容类型是不是与实际内容匹配?【英文标题】:How can i explicitly check request content-type is matching with actual content in Spring boot?如何在 Spring Boot 中明确检查请求内容类型是否与实际内容匹配? 【发布时间】:2021-07-10 12:14:12 【问题描述】:

我想验证我的请求内容类型是否与我的请求正文匹配? 我正在尝试实施 OWASP Rest 安全标准。

上面写着:

13.2.5 验证 REST 服务是否明确检查传入的 Content-Type 是否为预期的,例如 application/XML 或 application/JSON。

在下图中,内容类型是 JSON,但请求是 XML。仍然可以正常工作。

我的控制器代码:-

@RestController
public class TestController 

@PostMapping(path="/hello",consumes = "application/json")
public Map<String,String> hello(Master ecm)
    Map<String,String> m=new HashMap<>() ;
    m.put("message", "hello!");
    return m;
   


【问题讨论】:

【参考方案1】:

Spring 注释为此提供了一个特定的属性。它被称为消耗。

这是一个例子

@PostMapping(consumes = MediaType.SELECT_TYPE_HERE)

具体例子

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)

【讨论】:

我知道消费和生产,但是如果我在请求中将内容类型作为应用程序/XML 发送并且我的请求正文是 JSON 格式,那么检查我如何实现它?跨度> @tusharwason 从春季开始就已经为您准备好了。它将根据您在consumesproduces 上提供的信息自动提供正确的message body readermessage body writer 来解析请求或响应。如果 message body readermessage body writer 失败了,你就知道有些事情搞砸了 谢谢,@Boug,只是想知道 Sails js 中是否也有相同的功能? 你能再看看这个问题吗?我已经用图像和代码更新了它。

以上是关于如何在 Spring Boot 中明确检查请求内容类型是不是与实际内容匹配?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中使用明确指定的编组器

如何在 Spring Boot 中禁用或覆盖 RequestCacheAwareFilter

Spring Boot - 缓慢的请求/响应

如何在 Spring Boot 2 中使用内容协商建立自定义 xml 序列化

如何在 Spring Boot Health 中添加自定义健康检查?

spring boot跨域请求访问配置以及spring security中配置失效的原理解析