前言
因为最近有个需求需要根据客户端登录的ip地址进行城市定位,获取到用户的登录城市,网上查了一下,也借鉴了一些博客,我自己也使用ip2region自己写了一个
获取到客户端的ip地址
该步骤参考我以前的文章 获取客户端ip地址
引入依赖
1 2 3 4 5
| <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7.2</version> </dependency>
|
需要的文件下载地址
db文件下载地址,https://gitee.com/lionsoul/ip2region/tree/master/data 下载下来后解压,db文件在data目录下
新建 IpUtil 工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public class IpUtil { public static String getCityInfo(String ip) {
String dbPath = "G:\\IpData\\ip2region.db"; File file = new File(dbPath); if (file.exists() == false) { System.out.println("Error: Invalid ip2region.db file"); } 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; } }
|
测试
1 2 3 4 5 6 7 8
| 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); }
|
结语
正常情况下就能够正确获取到客户端登录用户的城市了,你也可以自己试一试哦,反正不要钱,哈哈哈哈哈……