java获取客户端的ip地址

获取和端的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;
     
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值