1、获取客户端真实ip地址

我们一般通过request.getRemoteAddr()获取客户端ip地址,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了,要通过如下方法

package com.jing.util;

import javax.servlet.http.HttpServletRequest;

/**
 * @author jingguoqiang
 * @desc   获取客户端ip地址
 */
public class IpUtils {  
    private IpUtils() {  
    }  
  
    /** 
    * @Description: 从代理的最上级开始剥皮  
    * @author: jingguoqiang
    * @date 2015-9-23 下午2:43:46 
    */ 
    public static String getIpAddr(HttpServletRequest request) {  
    	/*如果遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,
    	为什么这个获取的值变成了ipv6了呢,这种情况只有在服务器和客户端都在同一台电脑上才会出现
    	(而且是用localhost访问的时候才会出现),后来上网查了查原因,原来是/etc/hosts这个东西
    	作怪(在windows上应该是C:\Windows\system32\drivers\etc\hosts这个文件),只需要注释掉文
    	件中的 # ::1     localhost  这一行即可解决问题*/
        if (request == null) {  
            return "unknown";  
        }  
        String ip = request.getHeader("x-forwarded-for");  
       
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("X-Forwarded-For");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("X-Real-IP");  
        }  
  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
        }  
        System.out.println(">>>>>>获取客户端ip地址"+ip);
        return ip;  
    }  
}  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值