整合 ip2region
使用 ip2region 在 Java 中进行 IP 地理位置查询
本文将介绍如何使用 ip2region 库在 Java 应用中进行 IP 地址查询。ip2region 库提供了一种快速准确的方式来确定 IP 地址的地理位置。我们将一步步介绍如何设置库、配置它以及使用它来获取 IP 地址信息。
前提条件
在开始之前,确保你具备以下条件:
- Java 开发环境(JDK 8 或以上)
- Maven 作为项目管理工具
依赖添加
首先,在你的 Maven 项目的 pom.xml
文件中添加 ip2region 依赖:
<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region -->
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>2.7.0</version>
</dependency>
下载 IP 数据库
接下来,从 ip2region GitHub 仓库 下载 IP 数据库文件,并将其存放在 src/main/resources/ipdb/ip2region.xdb
路径下。
封装单例,枚举工具类
我们将创建一个单例工具类 Ip2RegionUtils
来简化 IP 查询的使用。以下是该工具类的代码:
package com.litongjava.open.chat.utils;
import java.io.IOException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.lionsoul.ip2region.xdb.Searcher;
import com.litongjava.tio.utils.hutool.FileUtil;
import com.litongjava.tio.utils.hutool.ResourceUtil;
public enum Ip2RegionUtils {
INSTANCE;
static String ip = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
static Pattern pattern = Pattern.compile(ip);
private static Searcher searcher;
static {
URL resource = ResourceUtil.getResource("ipdb/ip2region.xdb");
if (resource != null) {
byte[] bytes = FileUtil.readUrlAsBytes(resource);
try {
searcher = Searcher.newWithBuffer(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static boolean checkIp(String ipAddress) {
Matcher matcher = pattern.matcher(ipAddress);
return matcher.matches();
}
public static String searchIp(long ip) {
if (searcher != null) {
try {
return searcher.search(ip);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return null;
}
public static String searchIp(String ip) {
if (searcher != null) {
try {
return searcher.search(ip);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return null;
}
}
测试工具类
接下来,我们将编写一个测试类来验证我们的工具类是否正常工作:
import org.junit.Test;
public class Ip2RegionUtilsTest {
@Test
public void test() {
// 数据格式: 国家|区域|省份|城市|ISP
String searchIpInfo = Ip2RegionUtils.searchIp("192.168.1.1");
System.out.println(searchIpInfo);
searchIpInfo = Ip2RegionUtils.searchIp("76.76.21.21");
System.out.println(searchIpInfo);
}
}
输出结果
运行测试类后,你应该会看到类似如下的输出:
0|0|0|内网IP|内网IP
美国|0|北卡罗来纳|夏洛特|0
小结
通过上述步骤,我们成功地在 Java 项目中集成了 ip2region 库,并使用它进行 IP 地址的地理位置查询。ip2region 库提供了高效的 IP 查询能力,非常适合需要快速定位 IP 的应用场景。希望这篇文章能对你有所帮助,如果有任何问题或建议,欢迎留言讨论。