• 根据 ip 定位


    简述

    使用 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;
        }
    }
  • 相关阅读:
    使用docker搭建gitlab版本控制系统
    Spring Boot与Docker部署
    CentOS7 使用yum命令安装Java SDK(openjdk)
    配置带用户权限的docker registry v2
    Docker搭建带有访问认证的私有仓库
    CentOS7 关闭防火墙
    CentOS7.2网络配置
    Docker Machine 简介
    docker的常用命令汇总
    实时查看docker容器日志
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/14341628.html
Copyright © 2020-2023  润新知