45 lines
1.2 KiB
Java
45 lines
1.2 KiB
Java
package com.mir4updater.backend.utils;
|
|
|
|
import jakarta.servlet.http.HttpServletRequest;
|
|
|
|
public class IpUtils {
|
|
public static String getClientIpAddress(HttpServletRequest request) {
|
|
String[] headersToCheck = {
|
|
"X-Forwarded-For",
|
|
"Proxy-Client-IP",
|
|
"WL-Proxy-Client-IP",
|
|
"HTTP_CLIENT_IP",
|
|
"HTTP_X_FORWARDED_FOR"
|
|
};
|
|
|
|
String ip = null;
|
|
for (String header : headersToCheck) {
|
|
ip = request.getHeader(header);
|
|
if (isValidIp(ip)) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 处理多IP情况
|
|
if (ip != null && ip.contains(",")) {
|
|
ip = ip.split(",")[0].trim();
|
|
}
|
|
|
|
// 回退到默认方法
|
|
if (!isValidIp(ip)) {
|
|
ip = request.getRemoteAddr();
|
|
}
|
|
|
|
// 处理IPv6本地地址
|
|
if ("0:0:0:0:0:0:0:1".equals(ip)) {
|
|
ip = "127.0.0.1";
|
|
}
|
|
|
|
return ip;
|
|
}
|
|
|
|
private static boolean isValidIp(String ip) {
|
|
return ip != null && !ip.isEmpty() && !"unknown".equalsIgnoreCase(ip);
|
|
}
|
|
}
|