springboot异步记录ip并解析地理位置的功能

我爱海鲸 2026-01-06 15:11:49 暂无标签

简介记录ip并解析地理位置的功能、ip2region

直接参考文章

SpringBoot 如何实现异步编程

SpringBoot整合ip2region实现使用ip监控用户访问城市

ip2region 库

解决springboot读取jar包中文件的问题 

2026-01-06 start:

 /**
     * 获取IP归属地
     * @param ipAddress IP地址
     * @return IP归属地信息
     */
    private String getIpLocation(String ipAddress) {
        try {
            String result = HttpUtil.get("http://www.cip.cc/" + ipAddress);
            if (StrUtil.isBlank(result)) {
                return null;
            }
            
            // 提取 <pre> 标签中的内容
            int preStart = result.indexOf("<pre>");
            int preEnd = result.indexOf("</pre>");
            if (preStart < 0 || preEnd < 0 || preStart >= preEnd) {
                log.debug("无法找到 <pre> 标签,IP: {}", ipAddress);
                return null;
            }
            
            String preContent = result.substring(preStart + 5, preEnd).trim();
            
            // 使用正则表达式匹配"地址	:"这一行
            // 匹配格式:地址	: 中国 广东 广州
            java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("地址\\s*[::]\\s*(.+)");
            java.util.regex.Matcher matcher = pattern.matcher(preContent);
            
            if (matcher.find()) {
                String location = matcher.group(1).trim();
                // 移除可能的换行符和其他空白字符
                location = location.replaceAll("\\s+", " ").trim();
                if (StrUtil.isNotBlank(location)) {
                    return location;
                }
            }
            
            log.debug("无法解析IP归属地,IP: {}, 内容: {}", ipAddress, preContent);
        } catch (Exception e) {
            log.debug("获取IP归属地失败,IP: {}, 错误: {}", ipAddress, e.getMessage());
        }
        return null;
    }

end

你好:我的2025