简述
使用 ip2region 通过 IP 识别定位
1.添加 maven 依赖
<dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7</version> </dependency>
2.下载 ip2region.db 文件,并且导入到项目路径下
https://gitee.com/lionsoul/ip2region/tree/master/data
3. 集成工具类,通过传入 ip 返回定位字符串
@Slf4j public class AddressUtil { @SuppressWarnings("all") public static String getCityInfo(String ip) { DbSearcher searcher = null; try { String dbPath = AddressUtil.class.getResource("/ip2region/ip2region.db").getPath(); File file = new File(dbPath); if (!file.exists()) { String tmpDir = System.getProperties().getProperty("java.io.tmpdir"); dbPath = tmpDir + "ip.db"; file = new File(dbPath); FileUtils.copyInputStreamToFile(AddressUtil.class.getClassLoader().getResourceAsStream("classpath:ip2region/ip2region.db"), file); } int algorithm = DbSearcher.BTREE_ALGORITHM; DbConfig config = new DbConfig(); 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; } DataBlock dataBlock = null; if (!Util.isIpAddress(ip)) { log.error("Error: Invalid ip address"); } dataBlock = (DataBlock) method.invoke(searcher, ip); return dataBlock.getRegion(); } catch (Exception e) { log.error("获取IP地址失败,{}", e.getMessage()); } finally { if (searcher != null) { try { searcher.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } }