From 35b3cbfdc0ee4eb0bf99c3b8c0800c44d4dbdc7f Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 8 Sep 2025 17:47:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sczx/gateway/filter/LoggingGlobalFilter.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java index 617d42e..988fd10 100644 --- a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java +++ b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java @@ -94,7 +94,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public ServerHttpResponse getResponse() { ServerHttpResponse originalResponse = super.getResponse(); -// DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); return new ServerHttpResponseDecorator(originalResponse) { @Override @@ -102,14 +102,18 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { if (body instanceof Flux) { Flux flux = (Flux) body; return super.writeWith(flux.doOnNext(dataBuffer -> { + // 复制数据以避免修改原始缓冲区 + DataBuffer duplicate = dataBuffer.factory().allocateBuffer(dataBuffer.readableByteCount()); + duplicate.write(dataBuffer); + // 读取数据内容用于日志记录 - byte[] bytes = new byte[dataBuffer.readableByteCount()]; - dataBuffer.read(bytes); + byte[] bytes = new byte[duplicate.readableByteCount()]; + duplicate.read(bytes); String bodyContent = new String(bytes, StandardCharsets.UTF_8); responseBodyBuilder.append(bodyContent); - // 重置读取位置,以便后续处理可以正常读取 - dataBuffer.readPosition(0); + // 释放复制的缓冲区 + DataBufferUtils.release(duplicate); })); } return super.writeWith(body);