package com.cloudroam.common.util;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
/**
|
* @author Gadfy
|
* IP工具类
|
*/
|
@Slf4j
|
public class IPUtil {
|
|
private IPUtil() {
|
throw new IllegalStateException("Utility class");
|
}
|
|
private static final String[] IP_HEADER_CANDIDATES = {
|
"X-Forwarded-For",
|
"Proxy-Client-IP",
|
"WL-Proxy-Client-IP",
|
"HTTP_X_FORWARDED_FOR",
|
"HTTP_X_FORWARDED",
|
"HTTP_X_CLUSTER_CLIENT_IP",
|
"HTTP_CLIENT_IP",
|
"HTTP_FORWARDED_FOR",
|
"HTTP_FORWARDED",
|
"HTTP_VIA",
|
"REMOTE_ADDR"
|
};
|
|
public static String getIPFromRequest(HttpServletRequest request) {
|
if (request == null) {
|
if (null == RequestContextHolder.getRequestAttributes()) {
|
return null;
|
}
|
request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
}
|
|
for (String header : IP_HEADER_CANDIDATES) {
|
String ipList = request.getHeader(header);
|
if (ipList != null && ipList.length() != 0 && !"unknown".equalsIgnoreCase(ipList)) {
|
log.debug("ipList.split(\",\")[0]::{}", ipList.split(",")[0]);
|
return ipList.split(",")[0];
|
}
|
}
|
|
log.debug("request.getRemoteAddr()::{}", request.getRemoteAddr());
|
return request.getRemoteAddr();
|
}
|
}
|