因为最近有个需求需要根据客户端ip地址进行城市定位,使用了ip2region自己写了一个
一、获取到客户端的ip地址,参考以前的文章 获取ip地址
二、引入 ip2region
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
三、新建 IpUtil 文件
public class IpUtil {
public static String getCityInfo(String ip) {
// db文件下载地址,https://gitee.com/lionsoul/ip2region/tree/master/data 下载下来后解压,db文件在data目录下
String dbPath = "G:\\IpData\\ip2region.db";
File file = new File(dbPath);
if (file.exists() == false) {
System.out.println("Error: Invalid ip2region.db file");
}
//查询算法 B-tree
int algorithm = DbSearcher.BTREE_ALGORITHM;
try {
DbConfig config = new DbConfig();
DbSearcher searcher = new DbSearcher(config, dbPath);
Method method = null;
switch (algorithm) {
case DbSearcher.BTREE_ALGORITHM:
method = searcher.getClass().getMethod("btreeSearch", String.class);
break;
case DbSearcher.BINARY_ALGORITHM:
method = searcher.getClass().getMethod("binarySearch", String.class);
break;
case DbSearcher.MEMORY_ALGORITYM:
method = searcher.getClass().getMethod("memorySearch", String.class);
break;
}
if (Util.isIpAddress(ip) == false) {
System.out.println("Error: Invalid ip address");
}
DataBlock dataBlock = (DataBlock) method.invoke(searcher, ip);
return dataBlock.getRegion();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
四、测试
public static void main(String[] args) {
String cityIpString = getCityInfo("218.88.22.78");
String[] splitIpString = cityIpString.split("\\|");
String province = splitIpString[2].replaceAll("\\省", "");
String city = splitIpString[3].replaceAll("\\市", "");
System.out.println(province);
System.out.println(city);
}