前言
各位读者好久不见,由于最近都在摸鱼 尝试校招和准备明年的春招,所以这一个多月都没在写博客。言归正传,最近手头一个项目有一个要求,要求记录访问者的ip信息和访问的页面等信息,所以我采用了高德地图的IP定位API。
高德地图IP定位API
https://lbs.amap.com/api/webservice/guide/api/ipconfig/
正文
在这里其实有如下两种选择:
- 工具类的方式,在需要使用的接口处调用工具类
- 自定义注解+AOP的方式,在方法上添加自定义注解实现功能
经过效率的权衡最终选择了方法一,也就是工具类的实现方式。
了解API接口
使用该接口之前请先前往官网申请一个key!该key每日限定请求次数为300k,200QPS
通过官方文档我们了解了接口以及相应的请求方法、请求参数、返回结果等信息
编写代码
完成依赖注入
在这里我们要注意一个很重要的点就是,我们在请求外部API时务必设置超时时间,以免长时间的等待导致服务器被堵死。
在本项目中我们使用了SpringBoot提供的RestTemplate
对接口发送请求,首先我们新建一个IpUtil工具类,并设置RestTemplate的超时时间如下
我们设置了请求的URL和我们的key,并通过SimpleClientHttpRequestFactory 对我们请求的超时时间设置为3s,这样可以有效避免由于出现网络波动导致长时间堵塞。
获取用户IP
private String getUserIp(HttpServletRequest req) {
String ip = req.getHeader("X-Forwarded-For");
if (ip == null || ip.