如何在Java中获取客户端的IP地址?getRemoteAddr()返回运行Tomcat服务器的机器的IP地址
我正在使用以下代码获取客户端的Ip地址。但是对于所有的头,我得到的是空值。getRemoteAddr返回运行Tomcat服务器的机器的IP地址。那么,获取请求来自的机器的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
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中获取服务器地址,那么该机器中肯定存在一些代理拦截请求,