浏览代码

方法新增获取内网IP地址,获取当前用户登录的省份

fangqing 6 月之前
父节点
当前提交
60138286f0

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java

@@ -31,7 +31,7 @@ public class AddressUtils
         {
             return "内网IP";
         }
-        if (RuoYiConfig.isAddressEnabled())
+        if (!RuoYiConfig.isAddressEnabled())
         {
             try
             {

+ 58 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java

@@ -1,7 +1,18 @@
 package com.ruoyi.common.utils.ip;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.InetAddress;
+import java.net.URL;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.regex.Pattern;
 import javax.servlet.http.HttpServletRequest;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -379,4 +390,51 @@ public class IpUtils
         }
         return false;
     }
+
+
+    /**
+     * 2024-12-16 fangqing 加入 获取外网IP地址
+     */
+    /**
+     * IP 地址校验的正则表达式
+     */
+    private static final Pattern IPV4_PATTERN = Pattern.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
+
+    /**
+     * 获取 IP 地址的服务列表
+     */
+    private static final String[] IPV4_SERVICES = {
+            "http://checkip.amazonaws.com/",
+            "https://ipv4.icanhazip.com/",
+            "http://bot.whatismyipaddress.com/"
+            // and so on ...
+    };
+
+    public static String get() throws ExecutionException, InterruptedException {
+        List<Callable<String>> callables = new ArrayList<>();
+        for (String ipService : IPV4_SERVICES) {
+            callables.add(() -> get(ipService));
+        }
+
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        try {
+            // 返回第一个成功获取的 IP
+            return executorService.invokeAny(callables);
+        } finally {
+            executorService.shutdown();
+        }
+    }
+
+    private static String get(String url) throws IOException {
+        try (BufferedReader in = new BufferedReader(new InputStreamReader(new URL(url).openStream()))) {
+            String ip = in.readLine();
+            if (IPV4_PATTERN.matcher(ip).matches()) {
+                return ip;
+            } else {
+                throw new IOException("invalid IPv4 address: " + ip);
+            }
+        }
+    }
+
+
 }

+ 19 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/CommunityArticleServiceImpl.java

@@ -8,6 +8,8 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.ip.AddressUtils;
+import com.ruoyi.common.utils.ip.IpUtils;
 import com.ruoyi.generator.domain.Community.*;
 import com.ruoyi.generator.mapper.community.*;
 import com.ruoyi.generator.vo.*;
@@ -24,6 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
 /**
@@ -521,6 +524,22 @@ public class CommunityArticleServiceImpl extends ServiceImpl<CommunityArticleMap
         communityUserInfoVo.setFansCount(communityUserLikeMapper.selectList(new QueryWrapper<CommunityUserLike>().eq("like_user_id", userId)).size());
         communityUserInfoVo.setCompanionCount(0);
 
+
+
+        String truncatedString = null;
+        try {
+            String ip = IpUtils.get();
+            String address = AddressUtils.getRealAddressByIP(ip);
+            // 使用空格分割字符串
+            String[] parts = address.split(" ", 2); // 这里的2表示只分割一次
+            truncatedString = parts[0].replace("市","").replace("省","");
+        } catch (ExecutionException e) {
+            throw new RuntimeException(e);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+
+        communityUserInfoVo.setAddress(truncatedString);
         //设置是否被当前登录的用户关注
         communityUserInfoVo.setLike(false);
         Long loginUserId = SecurityUtils.getLoginUser().getUserId();

+ 6 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityUserInfoVo.java

@@ -114,4 +114,10 @@ public class CommunityUserInfoVo implements Serializable {
      */
     @ApiModelProperty("是否已拉黑")
     private boolean isBlock;
+
+    /**
+     *
+     */
+    @ApiModelProperty("地址")
+    private String address;
 }