在WebFilter中,如何识别入站HTTP请求是否有主体?我知道内容长度的标题是否存在检查,但这是一个最好的黑客。此外,它不会捕获所有的情况(一些客户端发送的主体没有内容长度标题)。
注:我只需要确定身体是否在那里,阅读身体是一个完全不同的问题!
服务器是netty,如果这有帮助的话
发布于 2022-12-04 19:16:01
要检查入站HTTP请求是否有主体,您可以使用Web通量框架提供的HttpRequest.getBody()方法。如果请求没有主体,此方法将返回空的Flux;如果请求体有,则返回包含请求主体的Flux。下面是如何使用此方法的示例:
public class MyWebFilter implements WebFilter {
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
HttpRequest request = exchange.getRequest();
Flux<DataBuffer> body = request.getBody();
// Check if the request has a body
if (body == null || body.count().block() == 0) {
// The request has no body
} else {
// The request has a body
}
}
}
这种方法比检查内容长度标头的存在更可靠,因为它直接检查请求主体本身,而不是依赖可能不可靠的头。
https://stackoverflow.com/questions/74598220
复制相似问题