当前位置:   article > 正文

ip2region 使用总结_ip2region.db

ip2region.db

ip2region 简介:

根据它获取一个具体ip的信息,通过IP解析出国家、具体地址、网络服务商等相关信息。

ip2region 实际应用:

在开发中,我们需要记录登陆的日志信息,关于登陆者的ip和位置信息,可以通过ip2region来实现。

Spring Boot集成ip2region

第一步:pom.xml引入

  1. <properties>
  2. <ip2region.version>1.7.2</ip2region.version>
  3. </properties>
  4. <dependency>
  5. <groupId>org.lionsoul</groupId>
  6. <artifactId>ip2region</artifactId>
  7. <version>${ip2region.version}</version>
  8. </dependency>

第二步:下载ip2region.db

 $ git clone https://gitee.com/lionsoul/ip2region.git

 下载这个项目之后到data/文件夹下面找到ip2region.db复制到项目resources下

第三步:ip2region 工具类

功能:主要基于IP获取当前位置信息。

  1. import org.apache.commons.io.IOUtils;
  2. import org.lionsoul.ip2region.DataBlock;
  3. import org.lionsoul.ip2region.DbConfig;
  4. import org.lionsoul.ip2region.DbSearcher;
  5. import org.lionsoul.ip2region.Util;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.core.io.ClassPathResource;
  9. import java.io.File;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.lang.reflect.Method;
  14. /**
  15. * @author zhouzhiwengang
  16. */
  17. public class AddressUtil {
  18. private static Logger log = LoggerFactory.getLogger(AddressUtil.class);
  19. @SuppressWarnings("all")
  20. public static String getCityInfo(String ip) {
  21. //db
  22. String dbPath = AddressUtil.class.getResource("/ip2region/ip2region.db").getPath();
  23. File file = new File(dbPath);
  24. if (!file.exists()) {
  25. log.info("地址库文件不存在,进行其他处理");
  26. String tmpDir = System.getProperties().getProperty("java.io.tmpdir");
  27. dbPath = tmpDir + File.separator + "ip2region.db";
  28. log.info("临时文件路径:{}", dbPath);
  29. file = new File(dbPath);
  30. if (!file.exists() || (System.currentTimeMillis() - file.lastModified() > 86400000L)) {
  31. log.info("文件不存在或者文件存在时间超过1天进入...");
  32. try {
  33. InputStream inputStream = new ClassPathResource("ip2region/ip2region.db").getInputStream();
  34. IOUtils.copy(inputStream, new FileOutputStream(file));
  35. } catch (IOException exception) {
  36. exception.printStackTrace();
  37. }
  38. }
  39. }
  40. //查询算法
  41. int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
  42. try {
  43. DbConfig config = new DbConfig();
  44. DbSearcher searcher = new DbSearcher(config, dbPath);
  45. //define the method
  46. Method method = null;
  47. switch (algorithm) {
  48. case DbSearcher.BTREE_ALGORITHM:
  49. method = searcher.getClass().getMethod("btreeSearch", String.class);
  50. break;
  51. case DbSearcher.BINARY_ALGORITHM:
  52. method = searcher.getClass().getMethod("binarySearch", String.class);
  53. break;
  54. case DbSearcher.MEMORY_ALGORITYM:
  55. method = searcher.getClass().getMethod("memorySearch", String.class);
  56. break;
  57. }
  58. DataBlock dataBlock = null;
  59. if (Util.isIpAddress(ip) == false) {
  60. log.error("Error: Invalid ip address");
  61. }
  62. dataBlock = (DataBlock) method.invoke(searcher, ip);
  63. return dataBlock.getRegion();
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. return null;
  68. }
  69. }

知识拓展:

遇到的问题:由于AddressUtil.java 工具类是处于项目common(基础通用模块),但部署到tomcat 容器中,提示无法加载ip2region.db 数据库资源文件。

产生上述问题的原因是:项目common(基础通用模块)没有把resources 资源文件夹下的相关资源打包,仅需要将ip2region.db 打包之项目common(基础通用模块).jar 中即可。

解决办法:改造项目common(基础通用模块)的pom.xml 文件,添加如下代码片段:

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/java</directory>
  5. <includes>
  6. <include>**/*.xml</include>
  7. </includes>
  8. </resource>
  9. <resource>
  10. <directory>src/main/resources</directory>
  11. <includes>
  12. <include>**.*</include>
  13. <include>**/*.*</include><!-- i18n能读取到 -->
  14. <include>**/*/*.*</include>
  15. </includes>
  16. </resource>
  17. </resources>
  18. </build>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/229739
推荐阅读
相关标签
  

闽ICP备14008679号