java 获取请求客户端的真实IP地址
转载自:http://leiyongping88.iteye.com/blog/1545930
用request.getRemoteAddr();
方法获取的IP地址是:127.0.0.1或192.168.0.66,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR
信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
public static 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; }
像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息。这种情况下,直接用request.getRemoteAddr()是无法取到真正的客户IP的。
实际的iisforward附加头如下:
WL-Proxy-Client-IP=215.4.1.29
Proxy-Client-IP=215.4.1.29
X-Forwarded-For=215.4.1.29
WL-Proxy-Client-Keysize=
WL-Proxy-Client-Secretkeysize=
X-WebLogic-Request-ClusterInfo=true
X-WebLogic-KeepAliveSecs=30
X-WebLogic-Force-JVMID=-527489098
WL-Proxy-SSL=false
public static String getIpAddr(HttpServletRequest request) {String ipAddress = null;ipAddress = request.getHeader("x-forwarded-for");if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();if(ipAddress.equals("127.0.0.1")){//根据网卡取本机配置的IPInetAddress inet=null;try {inet = InetAddress.getLocalHost();} catch (UnknownHostException e) {e.printStackTrace();}ipAddress= inet.getHostAddress();}}//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15if(ipAddress.indexOf(",")>0){ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));}}return ipAddress; }
转载于:https://www.cnblogs.com/winner-0715/p/6054951.html
java 获取请求客户端的真实IP地址相关推荐
- Java获取请求客户端的真实IP地址
整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- 后台获取访问端的真实ip地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客 ...
- JavaWeb 获取客户端的真实IP地址
通常我们在JavaWeb中获取客户端IP地址只需要使用request.getRemoteAddr();方法即可 如果前端使用了Nginx等反向代理的话,我们使用request.getRemoteAdd ...
- 获取本机的真实IP地址
Code: import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取本机的真实IP地址.<br> ...
- Java如何获取客户端主机真实IP地址
项目开发中,小编遇到一种需求,就是将系统项目与某台主机的IP地址绑定,让该系统只能在某台主机上使用,不要问小编为什么,我也是第一次遇到这么奇怪的需求,当然也不要问小编为什么不使用权限控制,现在的权限控 ...
- java ip 获取了两个_用Java获取本地的多个IP地址
翻API翻出来的,拿出来晒晒... 特别适用于获取本地的多个IP地址 import java.net.InetAddress; import java.net.NetworkInterface; im ...
- 获取微信浏览器的真实IP地址
问题来源 获取用户客户端IP地址是一个很简单的需求.用户打开网页,发送一个HTTP请求,后台从中提取出IP地址. 但是,在使用微信打开网页时,发现获取到的IP地址和在浏览器打开所得到的IP地址不一样. ...
- java获取请求本机ip地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
最新文章
- 大数据技术之Stome 概念
- integer加1_利用Abaqus UEL开发自定义单元1
- andorid程序UI线程下开启子线程闪退错误解决
- javascript --- 作用域和闭包
- Testing - 软件测试知识梳理 - 自动化测试
- LeetCode 1122 数组的相对排序-简单-unordered_map容器的应用
- CSS-Transform-transition-Animation
- Python数据结构与算法(三)--数据结构的概念
- 25.QWidget用法
- SCREEN MODULE 逻辑控制
- LwIP协议栈——网络接口管理
- Supervisor进程管理详解
- 【源码】regtools:离散不适定问题的分析与求解
- MPI_Bcast与MPI_Comm_split配合,实现行广播或列广播
- 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明
- 腾讯云通过公众号开通短信验证码
- Keysight的扫描电子元件软件EP-Scan 2023版本下载与安装配置教程
- wIN 7 一键清理垃圾
- Java输出水仙花数
- 【RF分类】基于matlab随机森林算法数据分类【含Matlab源码 2048期】
热门文章
- IIS日志分析方法及工具
- 宁波镇海区无犯罪记录办理流程
- flink on yarn模式出现The main method caused an error: Could not deploy Yarn job cluster问题排查+解决
- gevent+django并发资料调研
- Ubuntu下面安装字体后,显示不完全的问题
- 图像工程 CH6图像校正和修补
- OpenCV学习笔记十一-findcounters函数
- android下raw目录的作用,【android】读取/res/raw目录下的文件
- Raspberry Pi, UPNP(二), Scala
- vhdl变量除法_VHDL语法总结以及编码风格(二)