我的tomcat应用程序未从AWS Application负载均衡器接收X-Forwarded-For标头。负载均衡器配置为卸载SSL并通过HTTP与tomcat应用程序连接。我正在接收其他标头,例如x-forwarded-proto,x-forwarded-port,x-amzn-trace-id。我试图找到客户端的IP地址但现在坚持下去。我还检查了我收到的所有标题,以找出客户端的IP地址,但它不存在。有人可以帮帮我吗?
答案 0 :(得分:2)
这可能与tomcat配置有关。检查在tomcat中是否有以下配置来处理X-Forwarded-For
和X-Forwarded-proto
标题
<filter>
<filter-name>RemoteIpFilter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
<init-param>
<param-name>protocolHeader</param-name>
<param-value>x-forwarded-proto</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RemoteIpFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
以下是配置参考:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Basic_configuration_to_handle_&#39; x-forwarded-for&#39; 和&#39; x-forwarded-proto&#39; < / p>
您可以在$CATALINA_BASE/conf/web.xml
或应用程序的WEB-INF / web.xml中找到配置文件
Tomcat提供了许多可以配置使用的过滤器 所有使用$ CATALINA_BASE / conf / web.xml的Web应用程序或可能是 通过在中配置各个Web应用程序来配置它们 应用程序的WEB-INF / web.xml。
答案 1 :(得分:0)
感谢Anuruddha&amp;汤姆快速反应。它工作得很好。对于那些在春季启动应用程序中使用java配置的人,需要添加RemoteIpFilter bean才能使其正常工作。然后可以使用httpServletRequest.getRemoteAddr()
检索客户端IP地址。
@Configuration
public class ServletFilterConfig {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
}