package com.panzhihua.sangeshenbian.utils;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
public class IpUtils {
|
public static String getClientIp(HttpServletRequest request) {
|
String ip = null;
|
// 1. 优先检查代理头信息(需注意头可能被伪造)
|
String[] headers = {"X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP"};
|
|
for (String header : headers) {
|
ip = request.getHeader(header);
|
if (isValidIp(ip)) {
|
// 处理多层代理情况(X-Forwarded-For可能有多个逗号分隔的IP)
|
return ip.contains(",") ? ip.split(",")[0].trim() : ip;
|
}
|
}
|
|
// 2. 无代理头时使用默认方法
|
ip = request.getRemoteAddr();
|
|
// 处理IPv6本地地址格式
|
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
|
}
|
|
private static boolean isValidIp(String ip) {
|
return ip != null && ip.length() != 0
|
&& !"unknown".equalsIgnoreCase(ip);
|
}
|
}
|