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); } }