|
@@ -146,55 +146,34 @@ public class IPLocationUtil {
|
|
|
* @return 三级地址信息,格式:国家-省-市
|
|
|
*/
|
|
|
private String getFullAddressFromIp2region(String ip) {
|
|
|
- if (searcher == null) {
|
|
|
- log.warn("ip2region搜索器未初始化,无法查询IP归属地");
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
try {
|
|
|
- String region = searcher.search(ip);
|
|
|
- if (region == null || region.trim().isEmpty()) {
|
|
|
+ // 统一委托给 IPUtils,避免本地 Searcher 与库/数据版本不一致
|
|
|
+ String region = IPUtils.getIpRegion(ip);
|
|
|
+ if (region == null || region.trim().isEmpty() || "未知".equals(region) || "内网".equals(region)) {
|
|
|
return null;
|
|
|
}
|
|
|
-
|
|
|
- // ip2region返回格式:国家|0|省份|城市|ISP
|
|
|
- List<String> arr = cn.hutool.core.util.StrUtil.split(region, '|');
|
|
|
- if (arr.size() >= 4) {
|
|
|
- String country = "0".equals(arr.get(0)) ? null : arr.get(0);
|
|
|
- String province = "0".equals(arr.get(2)) ? null : arr.get(2);
|
|
|
- String city = "0".equals(arr.get(3)) ? null : arr.get(3);
|
|
|
-
|
|
|
- // 构建三级地址
|
|
|
- StringBuilder address = new StringBuilder();
|
|
|
-
|
|
|
- if (country != null && !country.trim().isEmpty()) {
|
|
|
- address.append(country);
|
|
|
-
|
|
|
- if (province != null && !province.trim().isEmpty()) {
|
|
|
- address.append("-").append(province);
|
|
|
-
|
|
|
- if (city != null && !city.trim().isEmpty()) {
|
|
|
- address.append("-").append(city);
|
|
|
- } else {
|
|
|
- // 没有城市信息,使用省份作为城市
|
|
|
- address.append("-").append(province);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 没有省份信息,使用国家作为省份和城市
|
|
|
- address.append("-").append(country).append("-").append(country);
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 没有国家信息,无法解析
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- return address.toString();
|
|
|
+
|
|
|
+ // IPUtils 返回通常为 "国家-省" 或仅 "国家"
|
|
|
+ List<String> arr = cn.hutool.core.util.StrUtil.split(region, '-');
|
|
|
+ String country = arr.size() >= 1 ? arr.get(0) : null;
|
|
|
+ String province = arr.size() >= 2 ? arr.get(1) : null;
|
|
|
+
|
|
|
+ if (country == null || country.trim().isEmpty()) {
|
|
|
+ return null;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ StringBuilder address = new StringBuilder();
|
|
|
+ address.append(country);
|
|
|
+ if (province != null && !province.trim().isEmpty()) {
|
|
|
+ address.append("-").append(province).append("-").append(province);
|
|
|
+ } else {
|
|
|
+ // 没有省份信息,用国家补齐三级
|
|
|
+ address.append("-").append(country).append("-").append(country);
|
|
|
+ }
|
|
|
+ return address.toString();
|
|
|
} catch (Exception e) {
|
|
|
log.warn("查询IP[{}]归属地出错", ip, e);
|
|
|
}
|
|
|
-
|
|
|
return null;
|
|
|
}
|
|
|
|