java代码获取客户端真实ip
时间: 2023-05-04 11:02:12 浏览: 96
在Java中获取客户端真实IP地址需要考虑到可能经过代理服务器或负载均衡器等多层代理,而且客户端的IP地址可能是IPv4或者IPv6地址。以下是一种比较通用的获取客户端真实IP地址的方法:
```java
import javax.servlet.http.HttpServletRequest;
public class IpUtil {
public static String getIpAddress(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.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
```
该方法的原理是从request对象的头部信息中获取客户端IP地址,优先考虑代理服务器的IP地址。如果获取不到有效的IP地址,则使用request.getRemoteAddr()方法获取客户端IP地址。
其中,x-forwarded-for、Proxy-Client-IP和WL-Proxy-Client-IP是常见的代理服务器头部信息,而HTTP_CLIENT_IP和HTTP_X_FORWARDED_FOR是比较少见的头部信息,但是也有可能被使用。