Java 获取客户端IP
2015-01-22 10:15
447 查看
像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息。这种情况下,直接用request.getRemoteAddr()是无法取到真正的客户IP的。
实际的iisforward附加头如下:
综上,正确作法如下:
实际的iisforward附加头如下:
WL-Proxy-Client-IP=211.161.1.239 Proxy-Client-IP=211.161.1.239 X-Forwarded-For=211.161.1.239 WL-Proxy-Client-Keysize= WL-Proxy-Client-Secretkeysize= X-WebLogic-Request-ClusterInfo=true X-WebLogic-KeepAliveSecs=30 X-WebLogic-Force-JVMID=-327089098 WL-Proxy-SSL=false
综上,正确作法如下:
private String getIpAddr() { String ipAddress = null; //ipAddress = this.getRequest().getRemoteAddr(); ipAddress = this.getRequest().getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getHeader("Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getHeader("WL-Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getRemoteAddr(); if(ipAddress.equals("127.0.0.1")){ //根据网卡取本机配置的IP InetAddress inet=null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress= inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } return ipAddress; }
import javax.servlet.http.HttpServletRequest; public class IpAddr { 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; } }
相关文章推荐
- JAVA 获取客户端IP
- java实现穿透代理获取客户端真实ip
- Java获取客户端IP
- JAVA获取客户端请求电脑IP,操作系统等等各种信息
- Java获取客户端IP
- java 获取客户端ip mac地址
- 一段通过WebRTC获取客户端内网IP的js (无需java/ActiveX支持)
- Java获取客户端IP(同样适用有代理服务器的情况)
- java服务器端根据ip获取客户端mac地址
- JAVA获取访问用户的客户端IP(适用于公网与局域网)
- java获取客户端IP
- JAVA 获取客户端 IP
- servlet(java)获取客户端IP(MAC)
- java获取客户端IP的方法
- Java获取客户端IP
- Java 获取客户端ip返回127.0.0.1问题
- JAVA/PHP服务器端获取客户端IP
- Java获取客户端ip mac地址
- java 获取客户端的真实ip
- java获取客户端请求IP地址 获取公网ip