获取和端的ip地址,如果没有经过反向代理就可以通过 request.getRemoteAddr()直接获取,如果有反向代理就要通过request.getHeader("X-Forwarded-For");进行转发
如果转为空就通过 request.getHeader("X-Real-IP");获取。
public String getIp(HttpServletRequest request){
//获取经过转发的ip数组,真实的ip地址是第一个String ip = request.getHeader("X-Forwarded-For");
if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
int index = ip.indexOf(",");
if(index != -1){
ip.substring(0,index);
}else{
return ip;
}
}
//如果转发的ip为空,NGINX就把X-Real-IP当成自己看到的ip
ip = request.getHeader("X-Real-IP");
if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
return ip;
}
//如果X-Real-IP也为空,就说明没有使用反向代理,机客户端直接访问服务端,就可以直接获取客户端的ip地址
ip=request.getRemoteAddr();
if("127.0.0.1".equals(ip)||"localhost".equalsIgnoreCase(ip)||"0:0:0:0:0:0:0:1".equals(ip)){
InetAddress addr;
try {
addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("ip==="+ip);
return ip;
}