gpt4 book ai didi

java - "X_FORWARDED_FOR" header 不在请求中

转载 作者:行者123 更新时间:2023-11-28 21:56:43 24 4
gpt4 key购买 nike

在我的 web 应用程序中,我需要为代理后面的客户端提取真实 IP 地址,在搜索之后我发现可能的方法是读取“X_FORWARDED_FOR” header 的内容,我使用的是 java servlet 和 header 传入请求的不包含“X_FORWARDED_FOR” header ,那么为什么 header 不包含在请求中?

我正在使用 java 1.7、tomcat v7、代理服务器 :TMG 并配置为使用“X_FORWARDED_FOR” header 。

请指教。

提前致谢。

更新:

  • 请求来自 jquery ajax 请求到 servlet。
  • 我读取可用 header 的代码:

    String ip = request.getHeader("X-Forwarded-For");//返回空值

            if (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 以及您测试的其他 header 都是自定义的(它是 almost standard ,但不完全是)。代理不必设置任何此类 header ,因此您必须测试代理服务器将设置哪个 header (如果有)。

但是,如果它被设置,你会测试它

request.getHeader("X-Forwarded-For");

HTTP_X_FORWARDED_FOR 将是 PHP 命名,如果您不使用 PHP,请不要使用它...

我会遍历所有传入的 header ,看看是否有任何 header 包含 ip。如果他们都不这样做,那你就不走运了。

你可以迭代所有的标题

enames = request.getHeaderNames();
while (enames.hasMoreElements()) {
String name = (String) enames.nextElement();
String value = request.getHeader(name);
// "name" and "value" variables contain the header + its value
}

另请注意,对于 java 应用程序,传递给 servlet 的通常是内部请求,您需要先请求外部请求以获得具有 header 的 httpservletrequest 实例。

另请注意,即使您实际上从该 header 中获得了 ip,您仍应考虑该信息是否可用。关于它的更多细节here .

关于java - "X_FORWARDED_FOR" header 不在请求中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com