瀏覽代碼

优化ip获取逻辑

zhouhao 7 年之前
父節點
當前提交
5a46cb4c2d
共有 1 個文件被更改,包括 14 次插入16 次删除
  1. 14 16
      hsweb-commons/hsweb-commons-utils/src/main/java/org/hswebframework/web/WebUtil.java

+ 14 - 16
hsweb-commons/hsweb-commons-utils/src/main/java/org/hswebframework/web/WebUtil.java

@@ -18,6 +18,7 @@
 
 package org.hswebframework.web;
 
+import org.springframework.util.StringUtils;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
@@ -68,6 +69,13 @@ public class WebUtil {
         return map;
     }
 
+     static final String[] ipHeaders = {
+            "X-Forwarded-For",
+            "X-Real-IP",
+            "Proxy-Client-IP",
+            "WL-Proxy-Client-IP"
+    };
+
     /**
      * 获取请求客户端的真实ip地址
      *
@@ -75,23 +83,13 @@ public class WebUtil {
      * @return ip地址
      */
     public static String getIpAddr(HttpServletRequest request) {
-        String ip = request.getHeader(" x-forwarded-for ");
-        if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("X-Forwarded-For");
-        }
-        if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
-            ip = request.getHeader("X-Real-IP");
-        }
-        if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
-            ip = request.getHeader(" Proxy-Client-IP ");
-        }
-        if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
-            ip = request.getHeader(" WL-Proxy-Client-IP ");
-        }
-        if (ip == null || ip.length() == 0 || " unknown ".equalsIgnoreCase(ip)) {
-            ip = request.getRemoteAddr();
+        String ip = request.getHeader("X-Forwarded-For");
+        for (String ipHeader : ipHeaders) {
+            if (!StringUtils.isEmpty(ipHeader) && ip.contains("unknown")) {
+                return request.getHeader(ipHeader);
+            }
         }
-        return ip;
+        return request.getRemoteAddr();
     }
 
     /**