多级反向代理java获取真实IP地址

Posted Ranch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多级反向代理java获取真实IP地址相关的知识,希望对你有一定的参考价值。

public static String getIpAddress(HttpServletRequest request){
        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("WL-Proxy-Client-IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getHeader("HTTP_CLIENT_IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getRemoteAddr(); 
        } 
        System.out.println(ip);
        return ip; 
      }

如果是多级反向代理上面方法不不行的话会出现 x-forwarded-for获取的地址是一长串的多个ip地址

public static String getIpAddress(HttpServletRequest request){
        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("WL-Proxy-Client-IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getHeader("HTTP_CLIENT_IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
          ip = request.getRemoteAddr();
          //多级反向代理
            if(ip.equals("127.0.0.1") || ip.equals("0:0:0:0:0:0:0:1")){
                //根据网卡取本机配置的IP
                InetAddress inet=null;
                try {
                    inet = InetAddress.getLocalHost();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
                ip= inet.getHostAddress();
            }

        } 
        System.out.println(ip);
        return ip; 
      }

 

以上是关于多级反向代理java获取真实IP地址的主要内容,如果未能解决你的问题,请参考以下文章

多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合

Java获取请求客户端的真实IP地址

Nginx多级反向代理下的IP透传

JSP 获取真实IP地址的代码

Java正确获取客户端真实IP方法整理

转载JSP 获取真实IP地址的代码