有时候我们会有这样的需求,通过一个ip地址获取用户所在国家,省份和城市。接下来我会详细介绍在SpringBoot应用中如何快速实现该功能。
GeoLite2 City介绍
GeoLite2 City是一个轻量数据库,它存储了常见ip地址与地理位置的对应关系,通过它我们可以轻松通过ip地址找到对应城市。所以在项目中只需整合它即可完成功能。
1.引入依赖
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.16.1</version>
</dependency>
2.下载GeoLite2 City数据库免费版
从 MaxMind 官网(https://dev.maxmind.com/geoip/geoip2/geolite2/)下载 GeoLite2-City.mmdb 数据库文件,并将其放置在项目的 resources 目录下。
因为官网是英文,而且需要注册,所以我这里提供了百度网盘下载地址:
通过百度网盘分享的文件:GeoLite2-City_20240816.tar.gz链接:https://pan.baidu.com/s/1NhX5yFMQAvPFzQavJiNi_g?pwd=yyds 提取码:yyds
代码结构如下:
3.编码
3.1 创建地址获取工具类
解释:该工具类提供一个方法,根据一个ip地址字符串获取所在国家、省份和城市,第一步先从类路径下加载数据库文件,第二步根据IP获取地址,由于该数据库是国外开源,地址库可能不全,所以当国家、省份、城市信息获取为空时,去淘宝ip地址获取网站重新获取地址封装结果并返回。
淘宝ip地址获取网址:
https://ip.taobao.com/
网址首页:
淘宝网的接口请求地址打开控制台可以看到:
该接口所需参数:
3.2创建controller接口
4.测试
浏览器发送请求测试:
成功获取到结果。