Springboot项目整合ip2region获取IpAddress详细信息

Springboot项目整合ip2region获取IpAddress详细信息

物料准备:

  1. ip2region的xml依赖信息
  2. ip2region.xdb数据库文件(ip库文件,可以在guthub的ip2region项目主页下载)
  3. 写一个Ip2regionUtil的工具类

引入获取ip及ip地址详情的相关依赖到pom.xml

<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId> 
    <!-- 提供了操作ip2region.xdb文件的方法 -->
    <version>2.6.3</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <!-- 提供了多种工具类,这里引入hutool是为了获取request中的ip地址-->
    <artifactId>hutool-all</artifactId> 
    <version>5.8.11</version>
</dependency>

将ip2region.xdb文件放到resources/xdb目录下

在这里插入图片描述

定义Ip2regionUtil.java工具类

import cn.hutool.extra.servlet.ServletUtil;
import lombok.extern.slf4j.Slf4j;
import org.lionsoul.ip2region.xdb.Searcher;
import org.springframework.util.ResourceUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.File;

@Slf4j
public class Ip2regionUtil {
    /**
     * 从HttpServletRequest中获取浏览器客户端的请求ip
     * @param request HttpServletRequest
     * @return String ip地址
     */
    public static String getIp(HttpServletRequest request){
        String clientIP = ServletUtil.getClientIP(request);
        String ip = "0:0:0:0:0:0:0:1".equals(clientIP) ? "127.0.0.1" : clientIP;
        ip = ip.trim();
        log.info("请求ip:{}", ip);
        return ip;
    }

    /**
     * 根据ip地址查询IP所属的实际地址信息
     * @param ip String  ip地址,如 223.120.23.106
     * @return String  xx省xx市xx区移动/联通/电信
     * @throws Exception
     */
    public static String getAddr(String ip) throws Exception{
        File file = ResourceUtils.getFile("classpath:xdb/ip2region.xdb");
        byte[] cBuff = Searcher.loadContentFromFile(file.getPath());
        Searcher searcher = Searcher.newWithBuffer(cBuff);
        String region = searcher.searchByStr(ip);
        String addr = region.replace("0|", "").replace("|0", "");
        log.info("请求addr:{}", addr);
        searcher.close();
        return addr;
    }
}

测试使用效果

2023-06-02 10:00:41,213  INFO [http-nio-8080-exec-5] [18e7c92c-ab87-4c5e-82bb-a5f1008f084c] c.a.k.u.Ip2regionUtil [Ip2regionUtil.java : 20] 请求ip:127.0.0.1
2023-06-02 10:00:41,356  INFO [http-nio-8080-exec-5] [18e7c92c-ab87-4c5e-82bb-a5f1008f084c] c.a.k.u.Ip2regionUtil [Ip2regionUtil.java : 30] 请求addr:内网IP|内网IP

2023-06-02 10:03:39,670  INFO [http-nio-8080-exec-1] [e4932db5-387f-458e-b385-08389b967d39] c.a.k.u.Ip2regionUtil [Ip2regionUtil.java : 20] 请求ip:10.1.5.212
2023-06-02 10:03:39,680  INFO [http-nio-8080-exec-1] [e4932db5-387f-458e-b385-08389b967d39] c.a.k.u.Ip2regionUtil [Ip2regionUtil.java : 30] 请求addr:内网IP|内网IP

===============================================
linux测试,遇到问题,找不到xdb文件;
解决方法如下:
1.jar包指定resource子文件打包:
需要在pom.xml里的build标签里设置resources资源打包配置
在这里插入图片描述
2.设置代码从ClassPathResource里读取xdb文件

    /**
     * 根据ip地址查询IP所属的实际地址信息
     * @param ip String  ip地址,如 223.120.23.106
     * @return String  xx省xx市xx区移动/联通/电信
     * @throws Exception
     */
    public static String getAddr(String ip) throws Exception{
        ClassPathResource resource = new ClassPathResource("\\xdb\\ip2region.xdb");
//        String canonicalPath = resource.getFile().getCanonicalPath();
//        log.info("canonicalPath:{}",canonicalPath);
//        File file = resource.getFile();

//        byte[] cBuff = Searcher.loadContentFromFile(file.getPath());

        byte[] cBuff = FileCopyUtils.copyToByteArray(resource.getInputStream());
        Searcher searcher = Searcher.newWithBuffer(cBuff);
        String region = searcher.searchByStr(ip);
        String addr = region.replace("0|", "").replace("|0", "");
        log.info("请求addr:{}", addr);
        searcher.close();
        return addr;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值