Tomcat - RemoteIpValve - x-forwarded-for标头为空

时间:2017-02-01 10:30:59

标签: java spring amazon-web-services tomcat amazon-elb

我在Tomcat 7(7.0.68)上部署了一个应用程序(JVM 1.8.0_31-b13,Spring MVC 4.2.4,Security 4.0.3),我正在使用AWS ELB来处理来自客户端的请求。 在我的应用程序中,我尝试使用X-forwarded-for标头获取客户端IP地址。如果我没有找到它,那么我使用HttpServletRequest类的方法getRemoteAddr。 当我在应用程序中记录信息时,我注意到了几件事:

第一: 标头x-forwarded-for始终为空

第二: 远程地址有时与elb ip相同,有时它与客户端IP地址相同。 我注意到了:

  • 当远程地址与客户端IP地址相同时,请求被视为安全,方案为https(方法isSecure和getScheme)
  • 当远程地址与elb地址ip相同时,请求不被视为安全且方案为http(方法isSecure和getScheme)

这是server.xml中的阀门配置:

<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto" internalProxies="172\.(1[6-9]|2\d|3[0-1])\.\d{1,3}\.\d{1,3}|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}" />

以下是elb地址ip的示例:172.31.xxx.xxx

我不明白:

  • 为什么x-forwarded-for标头始终为空。
  • 以及为什么有些请求被认为是有保障的,有些则不是。

感谢您的帮助

0 个答案:

没有答案