add ip getter
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
44
src/main/java/com/mir4updater/backend/utils/IpUtils.java
Normal file
44
src/main/java/com/mir4updater/backend/utils/IpUtils.java
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user