记一次:java获取真实ip地址问题
前言:在java代码中获取真实ip地址的代码如下所示
/*** 获取客户端IP* * @param request 请求对象* @return IP地址*/public static String getIpAddr(HttpServletRequest request){if (request == null){return "unknown";}String ip = request.getHeader("x-forwarded-for");System.out.println("================1===>"+ip);if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("Proxy-Client-IP");System.out.println("================2===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("X-Forwarded-For");System.out.println("================3===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("WL-Proxy-Client-IP");System.out.println("================4===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getHeader("X-Real-IP");System.out.println("================5===>"+ip);}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){ip = request.getRemoteAddr();System.out.println("================6===>"+ip);}System.out.println("================7===>"+getMultistageReverseProxyIp(ip));return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip);}
但实际上我的java项目是部署在docker容器上的,也就是说我将项目的jar包打成docker镜像在docker容器内进行启动。并且我还使用了nginx做了反向代理。那么每次获取的ip地址都是docker宿主机的ip地址而非我实际请求的ip地址。
总的请求路径就是:请求-->nginx-->docker容器-->java项目代码
解决:在nginx配置中将请求地址做些修改,如下
location /stage-api/ {proxy_pass http://xxx:xx/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
也就是在server下配置的反向代理中增加了
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
然后重新启动nginx
再次登录访问发现ip已经获取就是真实的ip了。
记一次:java获取真实ip地址问题相关推荐
- Java获取真实Ip地址
目录 一.工具类代码 二.ip伪造解决 一.工具类代码 /*** 获取Ip** @param request 请求*/public static String getIpRequest(HttpSer ...
- 老大说,网上这种获取真实IP地址的方法不对,我不信...
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:蔡永吉 来源:http://bit.ly/33H8RMm ...
- 502 proxy error解决方法_老大说,网上这种获取真实IP地址的方法不对,我不信......
作者:蔡永吉 来源:http://bit.ly/33H8RMm想必大家对这段代码并不陌生: public String getIpAddr(HttpServletRequest request) { ...
- java获取真实ip的方法
在网络中,如果不想被人监听,那么就需要获取 IP地址了,在电脑中我们可以使用到 ip地址获取工具,那么如何在 Java中获取真实的 IP地址呢? 1.首先我们需要先准备一台电脑,然后将电脑进行联网: ...
- 获取项目服务器ip,java获取服务器ip地址
java获取服务器ip地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的I ...
- nginx反向代理后,java获取真实ip和解决request.getServerName()的问题
1. nginx.conf的server下增加以下配置 #解决request.getServerName()的问题proxy_set_header Host $host:$server_port;pr ...
- JAVA获取主机IP地址
JAVA获取主机IP地址 java 获取主机IP地址工具类 import org.springframework.web.context.request.RequestAttributes; impo ...
- java获取网络ip地址_Java获取电脑真实IP地址的示例代码
/** * @author yins * @date 2018年8月12日下午9:53:58 */ import java.net.Inet4Address; import java.net.Inet ...
- Java 获取主机ip地址(ipv4)
在java 应用中, 有时需要获取应用所在服务器的ip地址, 比如说利用Zookeeper 做动态节点上下线时. java 提供了InetAddress 类来获取主机ip地址, 但是使用的时候需要注意 ...
最新文章
- vc++获取的蓝牙设备信息中rssi的值_Android低功耗蓝牙总结
- 什么是防火墙?—Vecloud微云
- CF981H K Paths
- 高精度算法(加减乘除取模(均可以处理负数))
- 畅通工程,How Many Tables ACM第九天-图论
- 解决SQL单用户模式不能转为多用户模式
- 2019第10周知识总结
- zlib1.2.5的编译
- 工作185:解决vue+el-element二级联动,选项选择后不显示的问题
- php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
- wetech-cms内容管理系统源码
- oopc——4.继承
- java数组给名字排序_用Java给数组排序
- DataGridView常用操作
- OpenStack Networking – FlatManager and FlatDHCPManager
- 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
- iic调试软件上时钟芯片测试,时钟芯片的测试方法和系统 Clock chip testing methods and systems...
- java加密不可逆,32位不可逆加密算法Java实现
- 【C补充】qsort函数 —— 数组元素排序
- (附源码)ssm教材管理系统 毕业设计 011229