chao 4 years ago
parent
commit
f0968df58b

+ 10 - 3
caimei365-cloud-gateway/src/main/java/com/caimei365/cloud/config/WebConfiguration.java

@@ -1,7 +1,11 @@
 package com.caimei365.cloud.config;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.stereotype.Component;
 import org.springframework.web.reactive.config.WebFluxConfigurer;
 import org.springframework.web.server.ServerWebExchange;
@@ -34,9 +38,12 @@ public class WebConfiguration implements WebFluxConfigurer {
         @Override
         public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
             ServerHttpRequest request = exchange.getRequest();
-            // 由于在低版本的spring-webflux中不支持直接获得请IP, 因此从ServerWebExchange中获得IP后,在放到header里
-            InetSocketAddress remoteAddress = request.getRemoteAddress();
-            String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
+            // 从我们的 nginx 重写请求获取的参数,X-Real-IP是在nginx中配置的,要对应上;
+            String clientIp = request.getHeaders().getFirst("X-Real-IP");
+            if (StringUtils.isEmpty(clientIp)) {
+                InetSocketAddress remoteAddress = request.getRemoteAddress();
+                clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
+            }
             ServerHttpRequest mutatedServerHttpRequest = request.mutate().header("X-CLIENT-IP", clientIp).build();
             ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
             return chain.filter(mutatedServerWebExchange);

+ 2 - 0
caimei365-cloud-gateway/src/main/resources/application.yml

@@ -20,6 +20,8 @@ spring:
           uri: lb://caimei365-cloud-product
           predicates:
             - Path=/product/**
+      x-forwarded:
+        enabled: false
 
 # 指定服务注册中心的地址
 eureka: