再修改

This commit is contained in:
2025-09-08 17:47:28 +08:00
parent 8b5648a3dc
commit 35b3cbfdc0

View File

@ -94,7 +94,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
@Override @Override
public ServerHttpResponse getResponse() { public ServerHttpResponse getResponse() {
ServerHttpResponse originalResponse = super.getResponse(); ServerHttpResponse originalResponse = super.getResponse();
// DataBufferFactory bufferFactory = originalResponse.bufferFactory(); DataBufferFactory bufferFactory = originalResponse.bufferFactory();
return new ServerHttpResponseDecorator(originalResponse) { return new ServerHttpResponseDecorator(originalResponse) {
@Override @Override
@ -102,14 +102,18 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered {
if (body instanceof Flux) { if (body instanceof Flux) {
Flux<? extends DataBuffer> flux = (Flux<? extends DataBuffer>) body; Flux<? extends DataBuffer> flux = (Flux<? extends DataBuffer>) body;
return super.writeWith(flux.doOnNext(dataBuffer -> { return super.writeWith(flux.doOnNext(dataBuffer -> {
// 复制数据以避免修改原始缓冲区
DataBuffer duplicate = dataBuffer.factory().allocateBuffer(dataBuffer.readableByteCount());
duplicate.write(dataBuffer);
// 读取数据内容用于日志记录 // 读取数据内容用于日志记录
byte[] bytes = new byte[dataBuffer.readableByteCount()]; byte[] bytes = new byte[duplicate.readableByteCount()];
dataBuffer.read(bytes); duplicate.read(bytes);
String bodyContent = new String(bytes, StandardCharsets.UTF_8); String bodyContent = new String(bytes, StandardCharsets.UTF_8);
responseBodyBuilder.append(bodyContent); responseBodyBuilder.append(bodyContent);
// 重置读取位置,以便后续处理可以正常读取 // 释放复制的缓冲区
dataBuffer.readPosition(0); DataBufferUtils.release(duplicate);
})); }));
} }
return super.writeWith(body); return super.writeWith(body);