当前位置: 首页 > news >正文

ip获取+归属地实现

1.背景

现在的社交平台一般都需要展示用户的归属地,这个功能有下面二个主要功能点,接下来我们来介绍下具体实现。

  • IP 获取

  • IP 转归属地

2.ip获取

2.1 Http请求

对于controller的请求,我们只需要写个拦截器,将用户的ip设置进上下文即可,非常方便。

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {RequestInfo info = new RequestInfo();   info.setUid(Optional.ofNullable(request.getAttribute(TokenInterceptor.ATTRIBUTE_UID)).map(Object::toString).map(Long::parseLong).orElse(null));info.setIp(ServletUtil.getClientIP(request));RequestHolder.set(info);return true;
}

ip在请求头中都会携带。直接用hutool的工具类获取ip

public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) {String[] headers = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};if (ArrayUtil.isNotEmpty(otherHeaderNames)) {headers = ArrayUtil.addAll(headers, otherHeaderNames);}return getClientIPByHeader(request, headers);
}

需要注意的是,如果我们开启了nginx来带来请求,需要在nginx里面保存用户真实ip到X-Real-IP,否则你拿到的就是nginx的ip地址了。

location /{proxy_pass http://127.0.0.1:8088;# 在 Nginx 的配置文件中使用 $remote_addr 可以获取到客户端的 IP 地址,# 这是因为 Nginx 会在接收到客户端请求时自动将客户端的真实 IP 地址存储在 $remote_addr 变量中。Malichyet proxy_set_header X-Real-IP $remote_elidnchatproxy_set_header Host $host;
}

2.2 websocket请求

对于websocket请求获取ip就会麻烦一些。首先我们要有个概念,websocket初期会借助http来升级

http://www.lryc.cn/news/310622.html

相关文章:

  • Python的错误和异常
  • C语言-------指针进阶(2)
  • Spring El表达式官方文档学习
  • RK3568 android11 调试陀螺仪模块 MPU6500
  • 【HTML】HTML基础6.1(表格以及常见属性)
  • 数字电路三宝:锁存器、寄存器和触发器
  • VLC相关资源及使用方法
  • 4_相机透镜畸变
  • 微信小程序(四十六)登入界面-进阶版
  • CSP-201712-2-游戏
  • 记录SSM项目集成Spring Security 4.X版本 之 加密验证和记住我功能
  • [AutoSar]BSW_Com09 CAN driver 模块FULL(BASIC)CAN、FIFO选择
  • WPF真入门教程30--顺风物流单据管理系统
  • Elasticsearch:向量相似度计算 - 可笑的速度
  • 两数相加的问题
  • 微信小程序的单位
  • 软考通过率真的低吗?
  • 国际视频编解码标准提案下载地址
  • 程序员是如何看待“祖传代码”的?
  • Python爬虫之爬取并下载哔哩哔哩视频
  • python 脚本设置输出颜色
  • 安卓websocket(客服端和服务端写在app端) 案例
  • C++面试宝典第34题:整数反序
  • 微信商城小程序设计
  • 如何合理布局子图--确定MATLAB的subplot子图位置参数
  • 【MySQL】基于Docker搭建MySQL一主二从集群
  • k8s 集群调度,标签,亲和性和反亲和性,污点和容忍,pod启动状态 排错详解
  • Idea 启动报错 failed to create jvm:jvm path url
  • 20款Visual Studio实用插件推荐
  • 基于SpringBoot的在线拍卖系统