chao 4 lat temu
rodzic
commit
afaacc50b0

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

@@ -13,7 +13,7 @@ import java.net.InetSocketAddress;
 import java.util.Objects;
 import java.util.Objects;
 
 
 /**
 /**
- * Description
+ * 全局过滤器
  *
  *
  * @author : Charles
  * @author : Charles
  * @date : 2021/3/24
  * @date : 2021/3/24
@@ -22,6 +22,7 @@ import java.util.Objects;
 public class WebConfiguration implements WebFluxConfigurer {
 public class WebConfiguration implements WebFluxConfigurer {
 
 
     /**
     /**
+     * 获取客户端IP
      * https://stackoverflow.com/questions/51192630/how-do-you-get-clients-ip-address-spring-webflux-websocket?rq=1
      * https://stackoverflow.com/questions/51192630/how-do-you-get-clients-ip-address-spring-webflux-websocket?rq=1
      * https://stackoverflow.com/questions/50981136/how-to-get-client-ip-in-webflux
      * https://stackoverflow.com/questions/50981136/how-to-get-client-ip-in-webflux
      * https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-filters
      * https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-filters
@@ -32,9 +33,11 @@ public class WebConfiguration implements WebFluxConfigurer {
     public static class RetrieveClientIpWebFilter implements WebFilter {
     public static class RetrieveClientIpWebFilter implements WebFilter {
         @Override
         @Override
         public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
         public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
-            InetSocketAddress remoteAddress = exchange.getRequest().getRemoteAddress();
+            ServerHttpRequest request = exchange.getRequest();
+            // 由于在低版本的spring-webflux中不支持直接获得请IP, 因此从ServerWebExchange中获得IP后,在放到header里
+            InetSocketAddress remoteAddress = request.getRemoteAddress();
             String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
             String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
-            ServerHttpRequest mutatedServerHttpRequest = exchange.getRequest().mutate().header("X-CLIENT-IP", clientIp).build();
+            ServerHttpRequest mutatedServerHttpRequest = request.mutate().header("X-CLIENT-IP", clientIp).build();
             ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
             ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
             return chain.filter(mutatedServerWebExchange);
             return chain.filter(mutatedServerWebExchange);
         }
         }