java获取ip

java代码:

package com.caiya.login.web.utils;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

public class ClientIpUtils {

   private static final Logger logger = Logger.getLogger(ClientIpUtils.class);

   /**
    * 获取调用端的IP地址
    * @param request
    * @return
    */
   public static String getClientIP(HttpServletRequest request) {   
      String ip = __getClientIp(request);
      if(StringUtils.isEmpty(ip))
         return ip;
      ip = ip.replaceAll("::1", "");
      if(ip.indexOf(",") != -1){
         ip = ip.substring(0, ip.indexOf(","));
      }
      return ip.trim();
   }

   // request.getHeader("x-real-ip");获取真实IP
   private static String __getClientIp(HttpServletRequest request){
      // 可获取多级代理IP,如果有多个,那么第一个为真实IP
      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.getRemoteAddr();   
       }
       return ip;
   }



}

此外,对结果进行ip格式校验是有必要的,ipv6正在热起来。。

你可能感兴趣的:(java获取ip)