Browse Source

add ReactiveWebUtils

zhou-hao 5 years ago
parent
commit
58d80316db

+ 7 - 0
hsweb-core/pom.xml

@@ -37,6 +37,13 @@
             <artifactId>spring-web</artifactId>
 
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webflux</artifactId>
+            <optional>true</optional>
+        </dependency>
+
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>

+ 37 - 0
hsweb-core/src/main/java/org/hswebframework/web/utils/ReactiveWebUtils.java

@@ -0,0 +1,37 @@
+package org.hswebframework.web.utils;
+
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.util.StringUtils;
+
+import java.net.InetSocketAddress;
+import java.util.Optional;
+
+
+public class ReactiveWebUtils {
+
+    static final String[] ipHeaders = {
+            "X-Forwarded-For",
+            "X-Real-IP",
+            "Proxy-Client-IP",
+            "WL-Proxy-Client-IP"
+    };
+
+    /**
+     * 获取请求客户端的真实ip地址
+     *
+     * @param request 请求对象
+     * @return ip地址
+     */
+    public static String getIpAddr(ServerHttpRequest request) {
+        for (String ipHeader : ipHeaders) {
+            String ip = request.getHeaders().getFirst(ipHeader);
+            if (!StringUtils.isEmpty(ip) && !ip.contains("unknown")) {
+                return ip;
+            }
+        }
+        return Optional.ofNullable(request.getRemoteAddress())
+                .map(InetSocketAddress::getHostName)
+                .orElse("unknown");
+    }
+
+}

+ 4 - 5
hsweb-logging/hsweb-access-logging-aop/src/main/java/org/hswebframework/web/loggin/aop/ReactiveAopAccessLoggerSupport.java

@@ -10,6 +10,7 @@ import org.hswebframework.web.logging.AccessLoggerListener;
 import org.hswebframework.web.logging.LoggerDefine;
 import org.hswebframework.web.logging.events.AccessLoggerAfterEvent;
 import org.hswebframework.web.logging.events.AccessLoggerBeforeEvent;
+import org.hswebframework.web.utils.ReactiveWebUtils;
 import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
@@ -66,7 +67,7 @@ public class ReactiveAopAccessLoggerSupport extends StaticMethodMatcherPointcutA
                 .doFinally(f -> {
                     loggerInfo.setResponseTime(System.currentTimeMillis());
                     eventPublisher.publishEvent(new AccessLoggerAfterEvent(loggerInfo));
-                }).subscriberContext(ReactiveLogger.start("accessLogId",loggerInfo.getId()));
+                }).subscriberContext(ReactiveLogger.start("accessLogId", loggerInfo.getId()));
     }
 
     protected Mono<?> wrapMonoResponse(Mono<?> mono, AccessLoggerInfo loggerInfo) {
@@ -80,7 +81,7 @@ public class ReactiveAopAccessLoggerSupport extends StaticMethodMatcherPointcutA
                 .doFinally(f -> {
                     loggerInfo.setResponseTime(System.currentTimeMillis());
                     eventPublisher.publishEvent(new AccessLoggerAfterEvent(loggerInfo));
-                }).subscriberContext(ReactiveLogger.start("accessLogId",loggerInfo.getId()));
+                }).subscriberContext(ReactiveLogger.start("accessLogId", loggerInfo.getId()));
     }
 
     @SuppressWarnings("all")
@@ -162,9 +163,7 @@ public class ReactiveAopAccessLoggerSupport extends StaticMethodMatcherPointcutA
         info.setRequestMethod(request.getMethodValue());
         info.setHeaders(request.getHeaders().toSingleValueMap());
 
-        Optional.ofNullable(request.getRemoteAddress())
-                .map(InetSocketAddress::getAddress)
-                .map(InetAddress::getHostAddress)
+        Optional.ofNullable(ReactiveWebUtils.getIpAddr(request))
                 .ifPresent(info::setIpAddr);
 
         return info;