From 640ff18d2d7f4be02ddb7f8f75e899f05545eb98 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期一, 05 二月 2024 11:56:52 +0800 Subject: [PATCH] 更新bug修改 --- cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java | 118 +++++++++++++++++++++++++++++------------------------------ 1 files changed, 58 insertions(+), 60 deletions(-) diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java index 11c37aa..f0969ab 100644 --- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java +++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java @@ -1,60 +1,58 @@ -//package cn.mb.cloud.gateway.filter; -// -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.cloud.gateway.filter.GatewayFilterChain; -//import org.springframework.cloud.gateway.filter.GlobalFilter; -//import org.springframework.core.Ordered; -//import org.springframework.core.io.buffer.*; -//import org.springframework.http.HttpMethod; -//import org.springframework.http.MediaType; -//import org.springframework.http.server.reactive.ServerHttpRequest; -//import org.springframework.http.server.reactive.ServerHttpRequestDecorator; -//import org.springframework.http.server.reactive.ServerHttpResponse; -//import org.springframework.stereotype.Component; -//import org.springframework.web.server.ServerWebExchange; -//import reactor.core.publisher.Flux; -//import reactor.core.publisher.Mono; -// -//import java.nio.charset.StandardCharsets; -//import java.util.Set; -// -// -//@Slf4j -//@Component -//public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { -// -// @Override -// public int getOrder() { -// return Ordered.HIGHEST_PRECEDENCE; -// } -// -// @Override -// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { -// ServerHttpRequest req = exchange.getRequest(); -// ServerHttpResponse res = exchange.getResponse(); -// String method = req.getMethodValue(); -// MediaType ct = req.getHeaders().getContentType(); -// if (HttpMethod.POST.matches(method)) { -// return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> { -// byte[] bytes = new byte[dataBuffer.readableByteCount()]; -// dataBuffer.read(bytes); -//// String bodyStr = new String(bytes, StandardCharsets.UTF_8); -//// exchange.getAttributes().put("POST_BODY", bodyStr); -// DataBufferUtils.release(dataBuffer); -// Flux<DataBuffer> cachedFlux = Flux.defer(() -> { -// DataBuffer buffer = res.bufferFactory().wrap(bytes); -// return Mono.just(buffer); -// }); -// ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) { -// @Override -// public Flux<DataBuffer> getBody() { -// return cachedFlux; -// } -// }; -// return chain.filter(exchange.mutate().request(mutateReq).build()); -// }); -// } -// return chain.filter(exchange); -// } -// -//} +package cn.mb.cloud.gateway.filter; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.*; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpRequestDecorator; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + + + +@Slf4j +@Component +public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { + + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + @Override + public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { + ServerHttpRequest req = exchange.getRequest(); + ServerHttpResponse res = exchange.getResponse(); + String method = req.getMethodValue(); + MediaType ct = req.getHeaders().getContentType(); + if (HttpMethod.POST.matches(method)) { + return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); +// String bodyStr = new String(bytes, StandardCharsets.UTF_8); +// exchange.getAttributes().put("POST_BODY", bodyStr); + DataBufferUtils.release(dataBuffer); + Flux<DataBuffer> cachedFlux = Flux.defer(() -> { + DataBuffer buffer = res.bufferFactory().wrap(bytes); + return Mono.just(buffer); + }); + ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) { + @Override + public Flux<DataBuffer> getBody() { + return cachedFlux; + } + }; + return chain.filter(exchange.mutate().request(mutateReq).build()); + }); + } + return chain.filter(exchange); + } + +} -- Gitblit v1.7.1