From 2386300f1ed591e6c46b7f32539cac7f2fd7d434 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期二, 18 七月 2023 08:58:31 +0800 Subject: [PATCH] 更新预约场地部分接口 --- cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java | 160 ++++++++++++++++++++++++++-------------------------- 1 files changed, 80 insertions(+), 80 deletions(-) diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java index a1873f1..da13e85 100644 --- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java +++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java @@ -1,80 +1,80 @@ -//package cn.mb.cloud.gateway.filter; -// -//import com.alibaba.fastjson.JSON; -//import lombok.extern.slf4j.Slf4j; -//import org.reactivestreams.Publisher; -//import org.springframework.cloud.gateway.filter.GatewayFilterChain; -//import org.springframework.cloud.gateway.filter.GlobalFilter; -//import org.springframework.core.Ordered; -//import org.springframework.core.io.buffer.DataBuffer; -//import org.springframework.core.io.buffer.DataBufferFactory; -//import org.springframework.core.io.buffer.DataBufferUtils; -//import org.springframework.http.HttpStatus; -//import org.springframework.http.server.reactive.ServerHttpRequest; -//import org.springframework.http.server.reactive.ServerHttpResponse; -//import org.springframework.http.server.reactive.ServerHttpResponseDecorator; -//import org.springframework.stereotype.Component; -//import org.springframework.web.server.ServerWebExchange; -//import reactor.core.publisher.Flux; -//import reactor.core.publisher.Mono; -// -//import java.nio.charset.StandardCharsets; -//import java.util.ArrayList; -//import java.util.List; -// -///** -// * 日志拦截器 -// */ -//@Slf4j -//@Component -//public class ResponseParamFilter implements GlobalFilter, Ordered { -// -// @Override -// public int getOrder() { -// return -1; -// } -// -// @Override -// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { -// try { -// ServerHttpRequest request = exchange.getRequest(); -// String uri = request.getURI().getRawPath(); -// ServerHttpResponse originalResponse = exchange.getResponse(); -// DataBufferFactory bufferFactory = originalResponse.bufferFactory(); -// HttpStatus statusCode = originalResponse.getStatusCode(); -// if(statusCode == HttpStatus.OK){ -// ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { -// @Override -// public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { -// if (body instanceof Flux) { -// Flux<? extends DataBuffer> fluxBody = Flux.from(body); -// return super.writeWith(fluxBody.map(dataBuffer -> { -// byte[] content = new byte[dataBuffer.readableByteCount()]; -// dataBuffer.read(content); -// DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory -// // 构建日志 build Journal -// StringBuffer sb = new StringBuffer(); -// sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n"); -// -// List<Object> rspArgs = new ArrayList<>(); -// rspArgs.add(originalResponse.getStatusCode()); -// String data = new String(content, StandardCharsets.UTF_8);//data -// sb.append(data); -// log.info(sb.toString(), rspArgs.toArray()); -// return bufferFactory.wrap(content); -// })); -// } else { -// log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode()); -// } -// return super.writeWith(body); -// } -// }; -// return chain.filter(exchange.mutate().response(decoratedResponse).build()); -// } -// return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data -// }catch (Exception e){ -// log.error("gateway log exception.\n" + e); -// return chain.filter(exchange); -// } -// } -//} +package cn.mb.cloud.gateway.filter; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.reactivestreams.Publisher; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.http.server.reactive.ServerHttpResponseDecorator; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +/** + * 日志拦截器 + */ +@Slf4j +@Component +public class ResponseParamFilter implements GlobalFilter, Ordered { + + @Override + public int getOrder() { + return -1; + } + + @Override + public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { + try { + ServerHttpRequest request = exchange.getRequest(); + String uri = request.getURI().getRawPath(); + ServerHttpResponse originalResponse = exchange.getResponse(); + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + HttpStatus statusCode = originalResponse.getStatusCode(); + if(statusCode == HttpStatus.OK){ + ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { + @Override + public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { + if (body instanceof Flux) { + Flux<? extends DataBuffer> fluxBody = Flux.from(body); + return super.writeWith(fluxBody.map(dataBuffer -> { + byte[] content = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(content); + DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory + // 构建日志 build Journal + StringBuffer sb = new StringBuffer(); + sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n"); + + List<Object> rspArgs = new ArrayList<>(); + rspArgs.add(originalResponse.getStatusCode()); + String data = new String(content, StandardCharsets.UTF_8);//data + sb.append(data); + log.info(sb.toString(), rspArgs.toArray()); + return bufferFactory.wrap(content); + })); + } else { + log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode()); + } + return super.writeWith(body); + } + }; + return chain.filter(exchange.mutate().response(decoratedResponse).build()); + } + return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data + }catch (Exception e){ + log.error("gateway log exception.\n" + e); + return chain.filter(exchange); + } + } +} -- Gitblit v1.7.1