美文网首页
APIGateway中获取客户端IP的方法

APIGateway中获取客户端IP的方法

作者: 加大装益达 | 来源:发表于2020-08-12 22:07 被阅读0次

    在使用ServletRequest获取客户端ip的时候,不仅仅只使用getRemoteHost来获取,还要使用XFF(X-Forwarded-For)。

    X-Forwarded-For是HTTP扩展头部,不是HTTP/1.1协议中的定义,但是现在基本是标准了,X-Forwarded-For存储了客户端IP和请求链路上各个代理IP。

    加入一个请求从IP1位置开始,经过IP2,IP3,IP4三个代理然后到达服务端,那么使用ServletRequest的getRemoteHost获取到的IP是:IP4,X-Forwarded-For中存储的是:

    X-Forwarded-For: IP1, IP2, IP3
    

    我们可以使用X-Forwarded-For中的值来获取真是IP:

    // ...
    String xff = request.getHeader(X_FORWARDED_FOR);
    if (StringUtils.isNotEmpty(xff)) {
      clientIp = xff.split(",")[0];
    }
    // ...
    

    但是如果伪造请求链路,客户端请求的时候手动添加X-Forwarded-For的值,就可能不能获取到正确的IP。

    源码:https://github.com/dachengxi/APIGateway
    原文链接:https://cxis.me/2020/04/12/APIGateway%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%AE%A2%E6%88%B7%E7%AB%AFIP%E7%9A%84%E6%96%B9%E6%B3%95/

    相关文章

      网友评论

          本文标题:APIGateway中获取客户端IP的方法

          本文链接:https://www.haomeiwen.com/subject/gaaqdktx.html