永发信息网

如何通过Request获取用户真实IP

答案:1  悬赏:80  手机版
解决时间 2021-01-24 09:51
如何通过Request获取用户真实IP
最佳答案
问题引出:


在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端 IP地址和原来客户端请求的服务器地址。
举例来说,当我们访问口碑网首页hangzhou.jsp时,其实并不是我们浏览器真正访问到了服务器上的hangzhou.jsp 文件,而是先由代理服务器Nagix去访问hagnzhou.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问hangzhou.jsp的,所以hangzhou.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。


获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
   if (request.getHeader("x-forwarded-for") == null) {
   return request.getRemoteAddr();
   }
   return request.getHeader("x-forwarded-for");
  }



获得客户端真实IP地址的方法二

public String getIpAddr(HttpServletRequest request) {
   String ip = request.getHeader("x-forwarded-for");
   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("Proxy-Client-IP");
   }
   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getHeader("WL-Proxy-Client-IP");
   }
   if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
   ip = request.getRemoteAddr();
   }
   return ip;
  }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
峁堡村地址有知道的么?有点事想过去
我想全职在吴江跑滴滴怎么样。求跑过的指点。
【刺猬英文】hedgehog英语用汉语怎么发音
①我们对于传说的话,应当经过一番思考,不应
阿杜发型设计地址在哪,我要去那里办事
6-2又九分之二 1又九分之七的计算过程
【家电下乡产品】...农民购买家电下乡产品将
人工饲养眼镜蛇喂什么
酷里雅专业发型设计地址有知道的么?有点事想
何山村地址在什么地方,我要处理点事
1.某食堂每天就餐平均人数为200人,年龄为25
为什么五金产品钻孔攻牙后有很少牙孔用通止规
燕华发廊怎么去啊,我要去那办事
【hopstep】求英语翻译Hop!Step!Jump!Drew!Dr
毛泽东在《沁园春。长沙》里有这样一句描写:
推荐资讯
爱家家政(漯河临颍县)怎么去啊,我要去那办事
北京俊驰宾馆怎么去啊,我要去那办事
一只鸡杀斤半,每只蚊子扛分半,多少只蚊能扛
西红柿怎样榨汁好喝
高转速发动机的优缺点有哪些?
解答一道英语题
宾馆停车场地址在什么地方,我要处理点事
包子包好用不用醒
急!这两天要的~揭东玉湖的申通快递还有汇通
平面构成设计,点的解释
可以把蔬菜水果给豚鼠当主食么?还有他吃什么
典型JAVA WEB开发实例教程有哪些
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?