package com.glxp.api.util; import cn.hutool.core.lang.Dict; import cn.hutool.core.net.NetUtil; import cn.hutool.http.HtmlUtil; import cn.hutool.http.HttpUtil; import com.glxp.api.config.RuoYiConfig; import com.glxp.api.constant.Constant; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; /** * 获取地址类 */ @Slf4j @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; } // 内网不查询 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", Constant.GBK) .execute() .body(); if (StringUtils.isEmpty(rspStr)) { log.error("获取地理位置异常 {}", ip); return UNKNOWN; } Dict obj = JsonUtils.parseMap(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; } }