cn.cliveyuan.tools.web.IpTools Maven / Gradle / Ivy
The newest version!
package cn.cliveyuan.tools.web;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
/**
* ip 工具
*
* @author clive
* Created on 2018/07/30
* @since 1.0
*/
@Slf4j
public class IpTools {
/**
* 获取访问者ip
*
* @param request
*/
public static String getClientIp(HttpServletRequest request) {
try {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if ("127.0.0.1".equals(ipAddress)
|| "0:0:0:0:0:0:0:1".equals(ipAddress)
|| "localhost".equals(ipAddress)) {
return "127.0.0.1";
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { //"***.***.***.***".length() = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
} catch (Exception e) {
log.error("getClientIp Exception", e);
return null;
}
}
}