add ip getter

This commit is contained in:
2025-04-24 11:41:37 +08:00
parent 884f80d3c0
commit 29db5ab157
2 changed files with 60 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
package com.mir4updater.backend.controller;
import com.mir4updater.backend.utils.IpUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IpController {
@GetMapping("/public-ip")
public String getPublicIp(HttpServletRequest request) {
String clientIp = IpUtils.getClientIpAddress(request);
return "Your public IP address is: " + clientIp;
}
}

View File

@@ -0,0 +1,44 @@
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);
}
}