1

我已经阅读了各种博客并实际完成了,但无法获得确凿和完整的证明方法来确定在所有可能的情况下获取客户端公共 ip。服务器端的配置是:| F5 <--> Apache Web 服务器 <--> Tomcat |

在代码中,我首先获取并解析请求标头X-FORWARDED-FOR以获取最左侧的公共 ip。如果没有找到我依靠request.getRemoteAddr()

所以问题是:

  1. 这在某些情况下效果很好,但在协议为 HTTPS 时会失败。在这种情况下可以做什么?

  2. 如果X-Forwarded-For没有任何价值,那么我必须依靠request.getRemoteAddr()它总是给我的服务器ip。这是因为 apache Web 服务器位于两者之间并getRemoteAddr返回发送请求的客户端或最后一个代理的地址。如何克服这种情况?

  3. 除了我应该读取其他值之外,还有其他标题X-forwarded-for吗?

  4. 还有哪些其他可能的情况应该处理?

4

1 回答 1

0
String forwardedHeader  = servletRequest.getHeader("X-Forwarded-For");
clientIP =  servletRequest.getRemoteAddr();    

String forwarded = "";
if (forwardedHeader != null && !forwardedHeader.isEmpty())
{
    forwarded = forwardedHeader;

    int commaIdx = forwarded.indexOf(',');
    if (commaIdx > 0)
    {
        clientIP = forwarded.substring(0, commaIdx);
    }

    forwarded = forwarded.replace(',', '|');
}

if (forwarded != null && !forwarded.isEmpty())
{
    clientIP = forwarded;
}
于 2013-09-01T19:19:23.220 回答