java重写post请求参数_记录spring-cloud-gateway获取post请求body参数,以及后端服务处理后的响应参数过程 gateway:2.2.0.RELEASE...

本文介绍了如何在 Spring Cloud Gateway 中捕获并处理 POST 请求的 Body 参数,通过创建全局过滤器 `CacheBodyGlobalFilter` 缓存 Body 内容,确保后续过滤器能够访问。同时,`WrapperResponseGlobalFilter` 过滤器用于处理响应,记录请求地址、参数、Body 和响应数据。文章提供了一个完整的解决方案,解决了请求 Body 数据丢失的问题。
摘要由CSDN通过智能技术生成

介绍一下框架版本

spring-boot:2.2.1.RELEASE

spring-cloud:Hoxton.RELEASE(2.2.0.RELEASE)

spring-cloud-gateway:2.2.0.RELEASE

在网上找了很多版本的代码,不起作用,要么获取不到body数据,要么重新封装request到后端服务后,报文丢失或者最大1024b数据,而且代码繁琐。

后面在博客园里一位大佬提供的解决方案

@Component

public class CacheBodyGlobalFilter implements Ordered, GlobalFilter {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

if (exchange.getRequest().getHeaders().getContentType() == null) {

return chain.filter(exchange);

} else {

return DataBufferUtils.join(exchange.getRequest().getBody())

.flatMap(dataBuffer -> {

DataBufferUtils.retain(dataBuffer);

Flux cachedFlux = Flux

.defer(() -> Flux.just(dataBuffer.slice(0, dataBuffer.readableByteCount())));

ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(

exchange.getRequest()) {

@Override

public Flux getBody() {

return cachedFlux;

}

};

return chain.filter(exchange.mutate().request(mutatedRequest).build());

});

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值