再修改
This commit is contained in:
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user