Kaynağa Gözat

fixbug 修复地址解析工具类报错#ICBHUQ

秋辞未寒 1 yıl önce
ebeveyn
işleme
6d2f104a43

+ 40 - 13
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ip/AddressUtils.java

@@ -16,28 +16,55 @@ import org.dromara.common.core.utils.StringUtils;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class AddressUtils {
 
+    // 未知IP
+    public static final String UNKNOWN_IP = "XX XX";
+    // 内网地址
+    public static final String LOCAL_ADDRESS = "内网IP";
     // 未知地址
-    public static final String UNKNOWN = "XX XX";
+    public static final String UNKNOWN_ADDRESS = "未知";
 
     public static String getRealAddressByIP(String ip) {
         // 处理空串并过滤HTML标签
         ip = HtmlUtil.cleanHtmlTag(StringUtils.blankToDefault(ip,""));
-        boolean isIPv6 = NetUtils.isIPv6(ip);
-        // 判断是否为IPv4或IPv6,如果不是则返回未知地址
-        if (!NetUtils.isIPv4(ip) && !isIPv6) {
-            return UNKNOWN;
+        // 判断是否为IPv4
+        if (NetUtils.isIPv4(ip)) {
+            return resolverIPv4Region(ip);
         }
-        // 内网不查询
-        if (NetUtils.isInnerIPv6(ip) || NetUtils.isInnerIP(ip)) {
-            return "内网IP";
+        // 判断是否为IPv6
+        if (NetUtils.isIPv6(ip)) {
+            return resolverIPv6Region(ip);
         }
-        // 不支持IPv6,不再进行没有必要的IP地址信息的解析,直接返回
-        if (isIPv6) {
-            log.warn("ip2region不支持IPV6地址解析:{}", ip);
-            // 如有需要,可自行实现IPv6地址信息解析逻辑,并在这里返回
-            return "未知";
+        // 如果不是IPv4或IPv6,则返回未知IP
+        return UNKNOWN_IP;
+    }
+
+    /**
+     * 根据IPv4地址查询IP归属行政区域
+     * @param ip ipv4地址
+     * @return 归属行政区域
+     */
+    private static String resolverIPv4Region(String ip){
+        // 内网不查询
+        if (NetUtils.isInnerIP(ip)) {
+            return LOCAL_ADDRESS;
         }
         return RegionUtils.getCityInfo(ip);
     }
 
+    /**
+     * 根据IPv6地址查询IP归属行政区域
+     * @param ip ipv6地址
+     * @return 归属行政区域
+     */
+    private static String resolverIPv6Region(String ip){
+        // 内网不查询
+        if (NetUtils.isInnerIPv6(ip)) {
+            return LOCAL_ADDRESS;
+        }
+        log.warn("ip2region不支持IPV6地址解析:{}", ip);
+        // 不支持IPv6,不再进行没有必要的IP地址信息的解析,直接返回
+        // 如有需要,可自行实现IPv6地址信息解析逻辑,并在这里返回
+        return UNKNOWN_ADDRESS;
+    }
+
 }