Gateway网关开发中我们的大部分时间都是在开发各种各样功能的过滤器,下面为网关,请求,响应日志打印的过滤器,以及涉及到的类
DefaultLogFilter
public class DefaultLogFilter implements GlobalFilter, Ordered {
/**
* 日志信息
*/
private static final Logger logger = LoggerFactory.getLogger(DefaultLogFilter.class);
@Override
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
long startTime = System.currentTimeMillis();
String trace = exchange.getRequest().getHeaders().getFirst("trace");
ServerRequest serverRequest = new DefaultServerRequest(exchange);
return serverRequest.bodyToMono(String.class).flatMap(reqBody -> {
//重写原始请求
ServerHttpRequestDecorator decorator = new ServerHttpRequestDecorator(exchange.getRequest()) {
@Override
public HttpHeaders getHeaders() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.putAll(super.getHeaders());
return httpHeaders;
}
@Override
public Flux getBody() {
//打印原始请求日志
logger.info("[Trace:{}]-gateway request:headers=[{}],body=[{}]", trace, getHeaders(), reqBody);
return Flux.ju