zhb.dong 1 年間 前
コミット
a084ad86bd

+ 1 - 1
zd-gateway/src/main/java/com/zd/gateway/filter/AuthFilter.java

@@ -27,7 +27,7 @@ import javax.annotation.Resource;
  *
  * @author zd
  */
-//@Component
+@Component
 public class AuthFilter implements GlobalFilter, Ordered {
 
     private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);

+ 51 - 39
zd-gateway/src/main/java/com/zd/gateway/filter/RequestBodyFilter.java

@@ -1,71 +1,83 @@
 package com.zd.gateway.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.slf4j.MDC;
 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.DataBufferUtils;
 import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.codec.HttpMessageReader;
+
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
 import org.springframework.stereotype.Component;
 import org.springframework.util.MultiValueMap;
-import org.springframework.util.StreamUtils;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
-import java.nio.charset.StandardCharsets;
 
 
-//@Component
+@Component
 @Slf4j(topic = "【gateway-http-body---】")
 public class RequestBodyFilter implements GlobalFilter, Ordered {
 
-    private final HttpMessageReader<String> messageReader;
-
-    public RequestBodyFilter(HttpMessageReader<String> messageReader) {
-        this.messageReader = messageReader;
-    }
-
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        log.info("============================ Request Begin =============================");
-        log.info("traceId:{}", MDC.get("traceId"));
-        log.info("Request path: {}", exchange.getRequest().getPath());
-
-        HttpHeaders headers = exchange.getRequest().getHeaders();
-        MediaType contentType = headers.getContentType();
-        if (contentType != null && contentType.isCompatibleWith(MediaType.APPLICATION_JSON)) {
-//            Flux<DataBuffer> body = exchange.getRequest().getBody();
-
-        }else{
-        log.info("Request query params: {}", exchange.getRequest().getQueryParams());
+        ServerHttpRequest request = exchange.getRequest();
+        URI URIPath = request.getURI();
+        String path = request.getPath().value();
+        String method = request.getMethodValue();
+        HttpHeaders headers = request.getHeaders();
+        log.info("============================================Request begin============================================");
+        log.info("Request Information :URI = {}, path = {},method = {},header = {}。", URIPath, path, method, headers);
+        if ("POST".equals(method)) {
+            return DataBufferUtils.join(exchange.getRequest().getBody())
+                    .flatMap(dataBuffer -> {
+                        byte[] bytes = new byte[dataBuffer.readableByteCount()];
+                        dataBuffer.read(bytes);
+                        try {
+                            String bodyString = new String(bytes, "utf-8");
+                            log.info("Request params :" + bodyString);
+                            exchange.getAttributes().put("POST_BODY", bodyString);
+                        } catch (UnsupportedEncodingException e) {
+                            e.printStackTrace();
+                        }
+                        DataBufferUtils.release(dataBuffer);
+                        Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
+                            DataBuffer buffer = exchange.getResponse().bufferFactory()
+                                    .wrap(bytes);
+                            return Mono.just(buffer);
+                        });
+                        ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
+                                exchange.getRequest()) {
+                            @Override
+                            public Flux<DataBuffer> getBody() {
+                                return cachedFlux;
+                            }
+                        };
+                        log.info("***********************************Request end**********************************");
+                        return chain.filter(exchange.mutate().request(mutatedRequest)
+                                .build()).then(Mono.fromRunnable(() -> {
+                            log.info("*********************************** Response begin **********************************");
+                            log.info("Response: code:{},headers:{}", exchange.getResponse().getStatusCode(),exchange.getResponse().getHeaders());
+                            log.info("============================================ Response end ============================================");
+                        }));
+                    });
+        } else {
+            MultiValueMap<String, String> queryParams = request.getQueryParams();
+            log.info("Request params :{} " ,queryParams);
+            log.info("***********************************Request end**********************************");
+            return chain.filter(exchange).then(Mono.fromRunnable(() -> {
+                log.info("*********************************** Response begin **********************************");
+                log.info("Response: code:{},headers:{}", exchange.getResponse().getStatusCode(),exchange.getResponse().getHeaders());
+                log.info("============================================ Response end ============================================");
+            }));
         }
-        log.info("Request headers: {}", headers);
-
-        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
-            log.info("Response status code: {}", exchange.getResponse().getStatusCode());
-            log.info("Response headers: {}", exchange.getResponse().getHeaders());
-            log.info("============================ Response End =============================");
-        }));
     }
 
-//    private Mono<String> readJsonBody(Flux<DataBuffer> body) {
-//        return this.messageReader.readMono(
-//                Mono.just(ServerHttpRequestDecorator.empty().body(BodyInserters.fromDataBuffers(body))),
-//                String.class,
-//                MediaType.APPLICATION_JSON,
-//                Map.of()
-//        );
-//    }
-
     @Override
     public int getOrder() {
         return -10;

+ 1 - 1
zd-gateway/src/main/java/com/zd/gateway/filter/TraceFilter.java

@@ -43,6 +43,6 @@ public class TraceFilter implements GlobalFilter, Ordered {
     }
     @Override
     public int getOrder() {
-        return -200;
+        return Ordered.HIGHEST_PRECEDENCE;
     }
 }

+ 0 - 78
zd-gateway/src/main/java/com/zd/gateway/filter/WrapperRequestGlobalFilter.java

@@ -1,78 +0,0 @@
-package com.zd.gateway.filter;
-
-import lombok.extern.slf4j.Slf4j;
-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.DataBufferUtils;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
-import org.springframework.stereotype.Component;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-
-@Component
-@Slf4j
-public class WrapperRequestGlobalFilter implements GlobalFilter, Ordered {
-    @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        ServerHttpRequest request = exchange.getRequest();
-        URI URIPath = request.getURI();
-        String path = request.getPath().value();
-        String method = request.getMethodValue();
-        HttpHeaders header = request.getHeaders();
-        log.info("");
-        log.info("***********************************请求信息**********************************");
-        log.info("请求request信息:URI = {}, path = {},method = {},header = {}。", URIPath, path, method, header);
-        if ("POST".equals(method)) {
-            return DataBufferUtils.join(exchange.getRequest().getBody())
-                    .flatMap(dataBuffer -> {
-                        byte[] bytes = new byte[dataBuffer.readableByteCount()];
-                        dataBuffer.read(bytes);
-                        try {
-                            String bodyString = new String(bytes, "utf-8");
-                            log.info("请求参数:" + bodyString);
-                            exchange.getAttributes().put("POST_BODY", bodyString);
-                        } catch (UnsupportedEncodingException e) {
-                            e.printStackTrace();
-                        }
-                        DataBufferUtils.release(dataBuffer);
-                        Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
-                            DataBuffer buffer = exchange.getResponse().bufferFactory()
-                                    .wrap(bytes);
-                            return Mono.just(buffer);
-                        });
-
-                        ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
-                                exchange.getRequest()) {
-                            @Override
-                            public Flux<DataBuffer> getBody() {
-                                return cachedFlux;
-                            }
-                        };
-                        log.info("****************************************************************************\n");
-                        return chain.filter(exchange.mutate().request(mutatedRequest)
-                                .build());
-                    });
-        } else if ("GET".equals(method)) {
-            MultiValueMap<String, String> queryParams = request.getQueryParams();
-            log.info("请求参数:" + queryParams);
-            log.info("****************************************************************************\n");
-            return chain.filter(exchange);
-        }
-        log.info("****************************************************************************\n");
-        return chain.filter(exchange);
-    }
-
-    @Override
-    public int getOrder() {
-        return Ordered.HIGHEST_PRECEDENCE;
-    }
-}

+ 0 - 61
zd-gateway/src/main/java/com/zd/gateway/filter/WrapperResponseGlobalFilter.java

@@ -1,61 +0,0 @@
-package com.zd.gateway.filter;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.reactivestreams.Publisher;
-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.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.Charset;
-
-
-@Component
-@Slf4j
-public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
-    @Override
-    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        ServerHttpResponse originalResponse = exchange.getResponse();
-        DataBufferFactory bufferFactory = originalResponse.bufferFactory();
-        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
-            @Override
-            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
-                if (getStatusCode().equals(HttpStatus.OK) && 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);
-                        //responseData就是下游系统返回的内容,可以查看修改
-                        String responseData = new String(content, Charset.forName("UTF-8"));
-                        log.info("");
-                        log.info("***********************************响应信息**********************************");
-                        log.info("响应内容:{}", responseData);
-                        log.info("****************************************************************************\n");
-                        byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes();
-                        return bufferFactory.wrap(uppedContent);
-                    }));
-                } else {
-                    log.error("响应code异常:{}", getStatusCode());
-                }
-                return super.writeWith(body);
-            }
-        };
-        return chain.filter(exchange.mutate().response(decoratedResponse).build());
-    }
-
-    @Override
-    public int getOrder() {
-        return -2;
-    }
-}