場景
@Component
public class LogRespFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpResponse originalResponse = exchange.getResponse();
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
//修改header
HttpHeaders httpHeaders = originalResponse.getHeaders();
httpHeaders.add("xxxxxx","aaaaaa");
//輸出返回結果
if (body instanceof Flux) {
Mono<Void> newMono = super.writeWith(
DataBufferUtils.join(body)
.doOnNext(dataBuffer -> {
String respBody = dataBuffer.toString(StandardCharsets.UTF_8);
//輸出body
logger.info("fgwResponse : body = {}", respBody);
})
);
//輸出response,不包含body
logger.info("fgwResponse : resp = {}", JSON.toJSONString(exchange.getResponse()));
return newMono;
}
return super.writeWith(body);
}
};
return chain.filter(exchange.mutate().response(decoratedResponse).build());
}
}