Преглед на файлове

调整请求端IP获取方式

andyliu преди 1 месец
родител
ревизия
0b2dfde5c6

+ 35 - 0
src/main/java/com/shkpr/service/mcpcenterservice/commtools/HttpUtils.java

@@ -0,0 +1,35 @@
+package com.shkpr.service.mcpcenterservice.commtools;
+
+import com.shkpr.service.mcpcenterservice.constants.ApiURI;
+import jakarta.servlet.http.HttpServletRequest;
+import org.apache.commons.lang3.StringUtils;
+
+public class HttpUtils {
+    public static String getIpAddress(HttpServletRequest request) {
+        String fromSource = ApiURI.HEADER_X_SOURCE_IP;
+        String ip = request.getHeader(fromSource);
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)){
+            fromSource = "X-Real-IP";
+            ip = request.getHeader(fromSource);
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            fromSource = "X-Forwarded-For";
+            ip = request.getHeader(fromSource);
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            fromSource = "Proxy-Client-IP";
+            ip = request.getHeader(fromSource);
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            fromSource = "WL-Proxy-Client-IP";
+            ip = request.getHeader(fromSource);
+        }
+        if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+            fromSource = "request.getRemoteAddr";
+            ip = request.getRemoteAddr();
+        }
+        if (!StringUtils.isEmpty(ip) && ip.contains(","))
+            return ip.split(",")[0];
+        return ip;
+    }
+}

+ 1 - 0
src/main/java/com/shkpr/service/mcpcenterservice/constants/ApiURI.java

@@ -11,6 +11,7 @@ public final class ApiURI {
     private ApiURI() {
     }
 
+    public static final String HEADER_X_SOURCE_IP = "X-Source-IP";
     public static final String ALLOW_HEADERS = "x-requested-with,Auth-Verify,Content-Type,X-Source-IP,Biz-Type,Client-Type,Authorization,user-agent,withCredentials";
     public static final String HEADER_AUTHORIZATION = "Authorization";
     public static final String BEARER_PREFIX = "Bearer ";

+ 9 - 12
src/main/java/com/shkpr/service/mcpcenterservice/filters/JwtAuthenticationFilter.java

@@ -3,6 +3,7 @@ package com.shkpr.service.mcpcenterservice.filters;
 import com.global.base.log.LogLevelFlag;
 import com.global.base.log.LogPrintMgr;
 import com.global.base.tools.FastJsonUtil;
+import com.shkpr.service.mcpcenterservice.commtools.HttpUtils;
 import com.shkpr.service.mcpcenterservice.commtools.JwtTokenUtil;
 import com.shkpr.service.mcpcenterservice.constants.ApiURI;
 import com.shkpr.service.mcpcenterservice.dto.LogFlagBizType;
@@ -42,10 +43,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
         if (StringUtils.isEmpty(token)) {
             writeAuthError(response, ResponseCode.STATUS_EMPTY_TOKEN);
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_WARN, mBusinessType, mStrClassName
-                    , String.format("Empty Token, Uri{%s} Remote{%s:%d}"
+                    , String.format("Empty Token, Uri{%s} Remote{%s}"
                             ,request.getRequestURI()
-                            ,request.getRemoteAddr()
-                            ,request.getRemotePort()));
+                            ,HttpUtils.getIpAddress(request)));
             return;
         }
 
@@ -64,10 +64,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
             McpAuthContextMgr.clear();
             writeAuthError(response, ResponseCode.STATUS_INVALID_TOKEN);
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_WARN, mBusinessType, mStrClassName
-                    , String.format("Token Parse Failed, Uri{%s} Remote{%s:%d}"
+                    , String.format("Token Parse Failed, Uri{%s} Remote{%s}"
                             ,request.getRequestURI()
-                            ,request.getRemoteAddr()
-                            ,request.getRemotePort()));
+                            ,HttpUtils.getIpAddress(request)));
             return;
         }
 
@@ -76,10 +75,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
             McpAuthContextMgr.clear();
             writeAuthError(response, ResponseCode.STATUS_INVALID_TOKEN);
             LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_WARN, mBusinessType, mStrClassName
-                    , String.format("Invalid Token, Uri{%s} Remote{%s:%d}"
+                    , String.format("Invalid Token, Uri{%s} Remote{%s}"
                             ,request.getRequestURI()
-                            ,request.getRemoteAddr()
-                            ,request.getRemotePort()));
+                            ,HttpUtils.getIpAddress(request)));
             return;
         }else {
             if (user.getExpiredTm() < System.currentTimeMillis()){
@@ -87,10 +85,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
                 McpAuthContextMgr.clear();
                 writeAuthError(response, ResponseCode.STATUS_EXPIRED_TOKEN);
                 LogPrintMgr.getInstance().printLogMsg(LogLevelFlag.LOG_WARN, mBusinessType, mStrClassName
-                        , String.format("Token Expired, Uri{%s} Remote{%s:%d}"
+                        , String.format("Token Expired, Uri{%s} Remote{%s}"
                                 ,request.getRequestURI()
-                                ,request.getRemoteAddr()
-                                ,request.getRemotePort()));
+                                ,HttpUtils.getIpAddress(request)));
                 return;
             }
         }