最近,多平台都上线了展示近期发帖所在地功能,比如抖音、微博、百度,像下面那样:
那么这个功能都是如何实现的呢?
一般有两个方法:GPS 定位的信息和用户 IP 地址。
由于每个手机都不一定会打开 GPS,而且有时并不太需要太精确的位置(到城市这个级别即可),所以根据 IP 地址入手来分析用户位置是个不错的选择。
所以ip2region框架应运而生,GitHub上⭐️已经10.6K,值得一用。
GitHub地址:github.com/lionsoul201…
快速上手???? 第一步,将整个项目down下来,找到data目录,进入这里有三份ip地址库,我们将ip2region.xdb复制出来,等下我们的java项目中需要使用到。
第二步,创建maven项目,引入依赖pom.xml依赖如下:
加好依赖后,在resources目录下创建ip2region文件夹,把上面的ip2region.xdb文件放进去。
第三步,编写测试类输出结果如下:
项目实现???? 1、思路分析通过上面简单的例子我们已经可以通过ip获取地域了,那么接下来将实现如何监控Controller接口的访问地址。
首先,在一个项目中肯定有很多接口,所以我们不能直接在接口中写代码的方式去实现,这样代码复杂度、耦合度太高。所以我打算在这里使用注解切面的方式实现,只需要在接口方法上加上 @Ip 注解就可以实现。不知道切面是什么的同学可以参考这篇文章:Springboot如何使用Aspectj实现AOP面向切面编程
其次,有些项目中会使用Nginx等反向代理软件,则不能通过 request.getRemoteAddr()获取 IP地址,如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非 unknown的有效IP字符串,则为真实IP地址。
最后,让我们来实现这个功能吧!
2、配置文件 SpringBoot项目pom.xml文件 3、项目代码 项目结构 SpringbootIpApplication.java TestController.java Ip.java IpAspect.java AddressUtil.java HttpContextUtil.java IPUtil.java 打印结果由于访问路径是:http://127.0.0.1:8080/test/hello,所以本地解析出来的是内网
到此这篇关于SpringBoot整合ip2region实现使用ip监控用户访问城市的文章就介绍到这了,更多相关SpringBoot整合ip2region内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!