APIGateway中获取客户端IP的方法

2020-08-12  本文已影响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/

上一篇下一篇

猜你喜欢

热点阅读