1.背景最近刷抖音发现上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候 , 都会显示自己的 IP 属地信息,其核心意义是让用户更具有真实性 , 减少虚假欺骗事件 。正好最近本人开发获取客户端ip , 做一些接口限流,黑白名单等需求功能,顺路就研究了一下怎么解析IP获取归属地问题 。
接下来,就着重讲解一下Java后端怎么实现IP归属地的功能 , 其实只需要以下两大步骤:
2.获取客户端ip接口做过web开发都知道,无论移动端还是pc端的请求接口都会被封装成为一个HttpServletRequest对象,该对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据等等 。
如果服务器直接把IP暴漏出去,那么request.getRemoteAddr()就能拿到客户端ip 。
但目前流行的架构中,基本上服务器都不会直接把自己的ip暴漏出去 , 一般前面还有一层或多层反向代理,常见的nginx居多 。加了代理后,相当于服务器和客户端中间还有一层,这时·request.getRemoteAddr()拿到的就是代理服务器的ip了,并不是客户端的ip 。所以这种情况下,一般会在转发头上加X-Forwarded-For等信息,用来跟踪原始客户端的ip 。
X-Forwarded-For: 这是一个 Squid 开发的字段,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项 。格式为X-Forwarded-For:client1,proxy1,proxy2,一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip 。上面的代码注释也说的很清楚,直接截取拿到第一个ip 。Proxy-Client-IP/WL- Proxy-Client-IP: 这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL-Proxy-Client-IP是他的weblogic插件加上的头 。这种情况也是直接能拿到 。HTTP_CLIENT_IP: 有些代理服务器也会加上此请求头 。X-Real-IP: nginx一般用这个 。
但是在日常开发中,并没有规范规定用以上哪一个头信息去跟踪客户端,所以都有可能,只能一一尝试,直到获取到为止 。代码如下:
ini
复制代码
@Slf4jpublic class IpUtils { private static final String UNKNOWN_VALUE = https://www.fajihao.com/i/“unknown”
- 华为销售岗位干什么的 华为技术销售岗位怎么样
- 比亚迪f0前盖怎么打开图解 比亚迪f0前盖怎么打开
- 华为蓝牙耳机怎么重新配对 华为耳机重新连接新设备
- 淘宝手机怎么分期付款 手机淘宝分期付款怎么付
- 怪物猎人世界历战任务怎么接 历战古龙的获取方法
- 怎么用“却……因为……”造句
- 职中怎么上职高 职中怎么上大学
- webp是什么格式怎么打开 手机webp图片查看器
- 未安装打印机怎么解决 打印时显示尚未安装的处理
- 去皮核桃仁怎么做 去皮核桃仁怎么做的