如何获取用户的ip地址

用户的 IP 地址可能会被隐藏或者修改,例如使用代理服务器、VPN 等工具,这样就无法准确获取用户的真实 IP 地址。

除了以上特殊情况,一般情况下 用户访问可能会经过一下链路 :

前端--->nginx--->网关--->服务 。 一般情况下后面三个获取的ip地址只能是前一个的ip 如网关只能获取到nginx的ip。所以一般情况下我们都需要从前端获取用户ip,再通过header传递下去。

nginx配置

java 复制代码
server {
    listen 80; #访问端口
    server_name your_domain.com; #访问域名

    location / {
        proxy_pass http://your_backend;  # nginx能访问的后端网关地址
        proxy_set_header X-Real-IP $remote_addr;  # 设置请求头中的 X-Real-IP 字段为用户真实 IP 地址

    }
}

网关配置全局拦截器 implements GlobalFilter 传递ip

java 复制代码
        ServerHttpRequest request = exchange.getRequest().mutate().
                header(CommonConstants.REAL_IP,exchange.getRequest().getRemoteAddress().getHostString()).build();

服务中获取

java 复制代码
        /**
         * HttpServletRequest在微服务中通过获取请求头从而获取到真实的客户端IP
         */
        String ip = request.getHeader(CommonConstants.REAL_IP);
相关推荐
旋律41412 小时前
什么是抽象类与接口
java
济南凡维12 小时前
智能相机 VS 工业相机:机器视觉选型一次讲透
网络·数码相机·视觉检测
旋律41412 小时前
String、StringBuilder、StringBuffer:三个"字符串",到底区别在哪?
java·后端
kxx66612 小时前
网络原理(初识)
网络
天南散修12 小时前
《802.11-2024》第06讲 · 介质接入:MAC 架构与 DCF(CSMA/CA)
linux·网络·wifi·802.11
一条泥憨鱼12 小时前
【Redis | 黑马点评】基于Redis的消息队列 | stream消息队列 源码解读
java·数据库·redis·缓存·lua
aibo86030812 小时前
基于 Spring Boot + Vue3 的博物馆藏品管理系统设计与实现
java·spring boot·后端
fanruitian13 小时前
python 进程 线程
java·前端·python
\光辉岁月/13 小时前
javaSE8-新特性-Stream&Option
java·stream·option
zzu123zsw13 小时前
把条件校验收敛到枚举接口:Spring Boot 统一断言模式与零污染异常切面工程化
java·spring boot·后端·架构设计