pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/AddressUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/RegionUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/ruoyi-common-core/src/main/resources/ip2region.xdb | 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -39,6 +39,8 @@ <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version> <lombok.version>1.18.26</lombok.version> <bouncycastle.version>1.72</bouncycastle.version> <!-- 离线IPå°åå®ä½åº --> <ip2region.version>2.7.0</ip2region.version> <!-- 临æ¶ä¿®å¤ snakeyaml æ¼æ´ --> <snakeyaml.version>1.33</snakeyaml.version> @@ -302,6 +304,13 @@ <version>${mapstruct-plus.version}</version> </dependency> <!-- 离线IPå°åå®ä½åº ip2region --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>${ip2region.version}</version> </dependency> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-system</artifactId> ruoyi-common/ruoyi-common-core/pom.xml
@@ -90,6 +90,12 @@ <artifactId>mapstruct-plus-spring-boot-starter</artifactId> </dependency> <!-- 离线IPå°åå®ä½åº --> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> </dependency> </dependencies> </project> ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/AddressUtils.java
@@ -2,11 +2,6 @@ import cn.hutool.core.net.NetUtil; import cn.hutool.http.HtmlUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.ruoyi.common.core.config.RuoYiConfig; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.utils.StringUtils; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -21,40 +16,18 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class AddressUtils { // IPå°åæ¥è¯¢ public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; // æªç¥å°å public static final String UNKNOWN = "XX XX"; public static String getRealAddressByIP(String ip) { String address = UNKNOWN; if (StringUtils.isBlank(ip)) { return address; return UNKNOWN; } // å ç½ä¸æ¥è¯¢ ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); if (NetUtil.isInnerIP(ip)) { return "å ç½IP"; } if (RuoYiConfig.isAddressEnabled()) { try { String rspStr = HttpUtil.createGet(IP_URL) .body("ip=" + ip + "&json=true", Constants.GBK) .execute() .body(); if (StringUtils.isEmpty(rspStr)) { log.error("è·åå°çä½ç½®å¼å¸¸ {}", ip); return UNKNOWN; } JSONObject obj = JSONUtil.parseObj(rspStr); String region = obj.getStr("pro"); String city = obj.getStr("city"); return String.format("%s %s", region, city); } catch (Exception e) { log.error("è·åå°çä½ç½®å¼å¸¸ {}", ip); } } return UNKNOWN; return RegionUtils.getCityInfo(ip); } } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/RegionUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package com.ruoyi.common.core.utils.ip; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.resource.ClassPathResource; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.file.FileUtils; import lombok.extern.slf4j.Slf4j; import org.lionsoul.ip2region.xdb.Searcher; import java.io.File; /** * æ ¹æ®ipå°åå®ä½å·¥å ·ç±»ï¼ç¦»çº¿æ¹å¼ * åèå°åï¼<a href="https://gitee.com/lionsoul/ip2region/tree/master/binding/java">éæ ip2region å®ç°ç¦»çº¿IPå°åå®ä½åº</a> * * @author lishuyan */ @Slf4j public class RegionUtils { private static final Searcher SEARCHER; static { String fileName = "/ip2region.xdb"; File existFile = FileUtils.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName); if (!FileUtils.exist(existFile)) { ClassPathResource fileStream = new ClassPathResource(fileName); if (ObjectUtil.isEmpty(fileStream.getStream())) { throw new ServiceException("RegionUtilsåå§å失败ï¼åå ï¼IPå°ååºæ°æ®ä¸åå¨ï¼"); } FileUtils.writeFromStream(fileStream.getStream(), existFile); } String dbPath = existFile.getPath(); // 1ãä» dbPath å è½½æ´ä¸ª xdb å°å åã byte[] cBuff; try { cBuff = Searcher.loadContentFromFile(dbPath); } catch (Exception e) { throw new ServiceException("RegionUtilsåå§å失败ï¼åå ï¼ä»ip2region.xdbæä»¶å è½½å 容失败ï¼" + e.getMessage()); } // 2ã使ç¨ä¸è¿°ç cBuff å建ä¸ä¸ªå®å ¨åºäºå åçæ¥è¯¢å¯¹è±¡ã try { SEARCHER = Searcher.newWithBuffer(cBuff); } catch (Exception e) { throw new ServiceException("RegionUtilsåå§å失败ï¼åå ï¼" + e.getMessage()); } } /** * æ ¹æ®IPå°å离线è·ååå¸ */ public static String getCityInfo(String ip) { try { ip = ip.trim(); // 3ãæ§è¡æ¥è¯¢ String region = SEARCHER.search(ip); return region.replace("0|", "").replace("|0", ""); } catch (Exception e) { log.error("IPå°å离线è·ååå¸å¼å¸¸ {}", ip); return "æªç¥"; } } public static void main(String[] args){ System.out.println(RegionUtils.getCityInfo("175.169.65.25")); } } ruoyi-common/ruoyi-common-core/src/main/resources/ip2region.xdbBinary files differ