Java 客户';负载均衡器后面的IP地址

Java 客户';负载均衡器后面的IP地址,java,tomcat,Java,Tomcat,我有下面的类来获取客户端的IP地址 public class IpUtils { public static final String _255 = "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; public static final Pattern pattern = Pattern.compile("^(?:" + _255 + "\\.){3}" + _255 + "$"); public static String

我有下面的类来获取客户端的IP地址

public class IpUtils {
     public static final String _255 = "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
     public static final Pattern pattern = Pattern.compile("^(?:" + _255 + "\\.){3}" + _255 + "$");

     public static String longToIpV4(long longIp) {
        int octet3 = (int) ((longIp >> 24) % 256);
        int octet2 = (int) ((longIp >> 16) % 256);
        int octet1 = (int) ((longIp >> 8) % 256);
        int octet0 = (int) ((longIp) % 256);
        return octet3 + "." + octet2 + "." + octet1 + "." + octet0;
     }

     public static long ipV4ToLong(String ip) {
        String[] octets = ip.split("\\.");
        return (Long.parseLong(octets[0]) << 24) + (Integer.parseInt(octets[1]) << 16) +
            (Integer.parseInt(octets[2]) << 8) + Integer.parseInt(octets[3]);
 }

     public static boolean isIPv4Private(String ip) {
        long longIp = ipV4ToLong(ip);
        return (longIp >= ipV4ToLong("10.0.0.0") && longIp <= ipV4ToLong("10.255.255.255")) ||
            (longIp >= ipV4ToLong("172.16.0.0") && longIp <= ipV4ToLong("172.31.255.255")) ||
            longIp >= ipV4ToLong("192.168.0.0") && longIp <= ipV4ToLong("192.168.255.255");
     }

     public static boolean isIPv4Valid(String ip) {
        return pattern.matcher(ip).matches();
 }

     public static String getIpFromRequest(HttpServletRequest request) {
        String ip;
        boolean found = false;
        if ((ip = request.getHeader("x-forwarded-for")) != null) {
          StrTokenizer tokenizer = new StrTokenizer(ip, ",");
          while (tokenizer.hasNext()) {
            ip = tokenizer.nextToken().trim();
            if (isIPv4Valid(ip) && !isIPv4Private(ip)) {
              found = true;
              break;
            }
          }
        }
        if (!found) {
          ip = request.getRemoteAddr();
        }
        return ip;
      }
}
公共类IpUtils{
公共静态最终字符串_255=“(?:25[0-5]| 2[0-4][0-9]|[01]?[0-9][0-9]?)”;
publicstaticfinalpattern=Pattern.compile(“^(?”++u255+“\\){3}”++u255+“$”);
公共静态字符串longToIpV4(长longIp){
int八位组3=(int)((longIp>>24)%256);
int八位字节2=(int)((longIp>>16)%256);
int八位元1=(int)((longIp>>8)%256);
int八位元0=(int)((longIp)%256);
返回八位字节3+“+八位字节2+”+八位字节1+“+八位字节0;
}
公共静态长ipV4ToLong(字符串ip){
字符串[]八位字节=ip.split(“\\”);

return(Long.parseLong(octets[0])你能显示/打印request.getHeader(“x-forwarded-for”)的值吗?第二次或每次你得到的是什么?我的负载平衡器的IP地址是10.0.0.135。request.getRemoteAddr()的值是多少?getRemoteAddr()提供客户端IP或负载平衡器IP