From b77abcbc0f17070a2a970e0c4aa5837e90f28e1f Mon Sep 17 00:00:00 2001
From: shikeying <pxzsky@163.com>
Date: 星期三, 03 四月 2024 14:02:49 +0800
Subject: [PATCH] 提供ip转地区离线查询(未完成)

---
 walker-web/src/main/java/com/walker/web/util/IpUtils.java |   72 ++++++++++++++++++++++++++----------
 1 files changed, 52 insertions(+), 20 deletions(-)

diff --git a/walker-web/src/main/java/com/walker/web/util/IpUtils.java b/walker-web/src/main/java/com/walker/web/util/IpUtils.java
index d438d55..122f43c 100644
--- a/walker-web/src/main/java/com/walker/web/util/IpUtils.java
+++ b/walker-web/src/main/java/com/walker/web/util/IpUtils.java
@@ -32,37 +32,69 @@
      *
      * @param request 璇锋眰瀵硅薄
      * @return IP鍦板潃
+     * @date 2023-10-21
+     * @date 2024-04-02 澧炲姞鑾峰彇璇锋眰澶翠腑鍙傛暟锛堣ˉ鍏咃級
      */
-    public static String getIpAddr(HttpServletRequest request)
-    {
-        if (request == null)
-        {
+    public static String getIpAddr(HttpServletRequest request) {
+        if (request == null) {
             return "unknown";
         }
-        String ip = request.getHeader("x-forwarded-for");
-        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip))
-        {
-            ip = request.getHeader("Proxy-Client-IP");
-        }
-        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip))
-        {
+
+        String ip = null;
+
+        // 浠ヤ笅涓や釜鑾峰彇鍦╧8s涓紝灏嗙湡瀹炵殑瀹㈡埛绔疘P锛屾斁鍒颁簡x-Original-Forwarded-For銆傝�屽皢WAF鐨勫洖婧愬湴鍧�鏀惧埌浜� x-Forwarded-For浜嗐��
+        ip = request.getHeader("X-Original-Forwarded-For");
+        if (ip == null || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
             ip = request.getHeader("X-Forwarded-For");
         }
-        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip))
-        {
+
+        //鑾峰彇nginx绛変唬鐞嗙殑ip
+        if (ip == null || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("x-forwarded-for");
+        }
+
+        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
             ip = request.getHeader("WL-Proxy-Client-IP");
         }
-        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip))
-        {
+        if (ip == null || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
             ip = request.getHeader("X-Real-IP");
         }
-
-        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip))
-        {
-            ip = request.getRemoteAddr();
+        if (ip == null || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
         }
 
-        return "0:0:0:0:0:0:0:1".equals(ip) ? LOCALHOST : getMultistageReverseProxyIp(ip);
+        // 2.濡傛灉娌℃湁杞彂鐨刬p锛屽垯鍙栧綋鍓嶉�氫俊鐨勮姹傜鐨刬p(鍏煎k8s闆嗙兢鑾峰彇ip)
+        if (ip == null || ip.length() == 0 || UNKNOWN_TEXT.equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+            // 濡傛灉鏄�127.0.0.1锛屽垯鍙栨湰鍦扮湡瀹瀒p
+            if (LOCALHOST.equals(ip)) {
+                // 鏍规嵁缃戝崱鍙栨湰鏈洪厤缃殑IP
+                InetAddress inet = null;
+                try {
+                    inet = InetAddress.getLocalHost();
+                    ip = inet.getHostAddress();
+                } catch (UnknownHostException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        // 瀵逛簬閫氳繃澶氫釜浠g悊鐨勬儏鍐碉紝绗竴涓狪P涓哄鎴风鐪熷疄IP,澶氫釜IP鎸夌収','鍒嗗壊
+        if (ip != null && ip.length() > 15) {
+            // = 15
+            if (ip.indexOf(StringUtils.DEFAULT_SPLIT_SEPARATOR) > 0) {
+                ip = ip.substring(0, ip.indexOf(StringUtils.DEFAULT_SPLIT_SEPARATOR));
+            }
+        }
+
+//        return "0:0:0:0:0:0:0:1".equals(ip) ? LOCALHOST : getMultistageReverseProxyIp(ip);
+        return "0:0:0:0:0:0:0:1".equals(ip) ? LOCALHOST : ip;
     }
 
     /**

--
Gitblit v1.9.1