Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获取客户端的IP地址?getRemoteAddr()返回运行Tomcat服务器的机器的IP地址_Java_Jakarta Ee_Networking_Http Headers_Ip - Fatal编程技术网

如何在Java中获取客户端的IP地址?getRemoteAddr()返回运行Tomcat服务器的机器的IP地址

如何在Java中获取客户端的IP地址?getRemoteAddr()返回运行Tomcat服务器的机器的IP地址,java,jakarta-ee,networking,http-headers,ip,Java,Jakarta Ee,Networking,Http Headers,Ip,我正在使用以下代码获取客户端的Ip地址。但是对于所有的头,我得到的是空值。getRemoteAddr返回运行Tomcat服务器的机器的IP地址。那么,获取请求来自的机器的IP地址的有效方法是什么 private static final String[] HEADERS_TO_TRY = { "X-Forwarded-For", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWAR

我正在使用以下代码获取客户端的Ip地址。但是对于所有的头,我得到的是空值。getRemoteAddr返回运行Tomcat服务器的机器的IP地址。那么,获取请求来自的机器的IP地址的有效方法是什么

    private static final String[] HEADERS_TO_TRY = { 
      "X-Forwarded-For",
      "Proxy-Client-IP",
      "WL-Proxy-Client-IP",
      "HTTP_X_FORWARDED_FOR",
      "HTTP_X_FORWARDED",
      "HTTP_X_CLUSTER_CLIENT_IP",
      "HTTP_CLIENT_IP",
      "HTTP_FORWARDED_FOR",
      "HTTP_FORWARDED",
      "HTTP_VIA",
      "REMOTE_ADDR" };

    public static String getClientIpAddress(HttpServletRequest request) {
      for (String header : HEADERS_TO_TRY) {
        String ip = request.getHeader(header);
        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
    }
    return request.getRemoteAddr();
   }

在servlet和客户机之间是否有Web服务器或负载平衡器,如ApacheHTTP?如果是这样,您可能必须配置该代理以转发客户端的ip,例如使用HTTP_X头。可能重复@Thomas:没有负载均衡器b/w客户端和servlet。我在Tomcat6上运行这个servlet。我绝对认为@Thomas所说的是正确的。如果您说您正在request.getRemoteAddr中获取服务器地址,那么该机器中肯定存在一些代理拦截请求,