private static final String UN_KNOWN = "unKnown";
private static String getIpAddress() {
if (ObjectUtils.isEmpty(RequestContextHolder.getRequestAttributes())) {
return null;
}
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String xip = request.getHeader("X-Real-IP");
String xFor = request.getHeader("X-Forwarded-For");
if(!StringUtils.isEmpty(xFor) && !UN_KNOWN.equalsIgnoreCase(xFor)){
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = xFor.indexOf(",");
if(index != -1){
return xFor.substring(0,index);
}else{
return xFor;
}
}
xFor = xip;
if(!StringUtils.isEmpty(xFor) && !UN_KNOWN.equalsIgnoreCase(xFor)){
return xFor;
}
if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) {
xFor = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) {
xFor = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) {
xFor = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) {
xFor = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) {
xFor = request.getRemoteAddr();
}
return xFor;
}