步骤
- 通过
HttpServletRequest
对象,获取用户的 IP 地址 - 通过 IP 地址,获取对应的省份、城市
获取IP工具类
首先需要写一个 IP 获取的工具类,因为每一次用户的 Request
请求,都会携带上请求的 IP 地址放到请求头中
通过此方法,从请求Header中获取到用户的IP地址
获取IP属地——ip2region
数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比经典的纯真IP定位准确一些。ip2region的数据聚合自以下服务商的开放API或者数据(升级程序每秒请求次数2到4次):
- 01, >80%, 淘宝IP地址库, ip.taobao.com
- 02, ≈10%, GeoIP, geoip.com
- 03, ≈2%, 纯真IP库, www.cz88.net
Ip2region开源项目目前最新已更新到了v2.0版本,ip2region v2.0
是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,准提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。
ip2region xdb java 查询客户端实现
下载 ip2region.db
地址:https://github.com/lionsoul2014/ip2region/tree/master/data
引入maven仓库
1 | <dependency> |
完全基于文件的查询
1 | import org.lionsoul.ip2region.xdb.Searcher; |
缓存VectorIndex索引
提前从 xdb 文件中加载出来 VectorIndex
数据,然后全局缓存,每次创建 Searcher
对象的时候使用全局的 VectorIndex
缓存可以减少一次固定的 IO 操作,从而加速查询,减少 IO 压力。
1 | import org.lionsoul.ip2region.xdb.Searcher; |
缓存整个xdb数据
也可以预先加载整个 ip2region.xdb
的数据到内存,然后基于这个数据创建查询对象来实现完全基于文件的查询,类似之前的 memory search
。
1 | import org.lionsoul.ip2region.xdb.Searcher; |