【发布时间】:2012-12-09 14:27:23
【问题描述】:
在我的 Web 应用程序中,我需要为代理后面的客户端提取真实 IP 地址,经过搜索我发现可能的方法是读取“X_FORWARDED_FOR”标头的内容,我使用的是 java servlet 和标头传入的请求不包含“X_FORWARDED_FOR”标头,那么为什么标头不包含在请求中?
我正在使用 java 1.7、tomcat v7、代理服务器 :TMG 并配置为使用“X_FORWARDED_FOR”标头。
请指教。
提前致谢。
更新:
- 请求来自 jquery ajax 请求到 servlet。
-
我读取可用标题的代码:
String ip = request.getHeader("X-Forwarded-For");//返回nullif (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); //return null } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); //return null } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); //return null } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); //return null } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); //return proxy server IP }
【问题讨论】:
-
请求从何而来?远非所有代理都会添加
X_FORWARDED_FOR。另外:您可以将阅读标题的相关代码片段添加到您的问题中吗? -
这不是编程问题。它可能适用于服务器故障。该请求没有标头,因为客户端没有添加它,无论该客户端是代理服务器还是浏览器。
-
@erickson 看起来代码有一个错误,这就是它无法工作的原因,那么为什么这不是一个编程问题呢?
-
@eis 我没有看到这个错误。如果是这样的话,这确实是这个地方。我从表面上接受了他的问题:如果请求不包含标头,那是客户端,而不是代码。
-
我在 serverfault.com 中询问过,这就是解决方案:serverfault.com/questions/456532/…