如何获取用户的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);
相关推荐
不会写DN28 分钟前
其实跨域问题是后端来解决的? CORS
服务器·网络·面试·go
Harvy_没救了31 分钟前
【网络架构】Keepalived + LVS(DR) + MariaDB 双主备实践
网络·架构·lvs
lUie INGA6 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
大鹏说大话6 小时前
SSL证书自动化的未来:ACME协议与Let’s Encrypt实践
网络·安全
geBR OTTE7 小时前
SpringBoot中整合ONLYOFFICE在线编辑
java·spring boot·后端
Porunarufu7 小时前
博客系统UI自动化测试报告
java
被摘下的星星7 小时前
网际协议(IP协议)
网络·tcp/ip
Aurorar0rua8 小时前
CS50 x 2024 Notes C - 05
java·c语言·数据结构
爱学习的小囧8 小时前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
Cosmoshhhyyy8 小时前
《Effective Java》解读第49条:检查参数的有效性
java·开发语言