Spring,Tomcat – 获取负载均衡器后面的真实 IP
原文: https://howtodoinjava.com/tomcat/tomcat-get-real-ip-behind-load-balancer/
通常,出于日志记录和安全目的,我们需要传入请求的 IP 地址信息。 在任何 Java Web 应用中,都可以使用getRemoteAddr()
方法获取 IP 地址。
String httpServletAddress = request.getRemoteAddr();
但是,如果您的应用在负载均衡器代理后面运行,并且您希望转换用户使用的真实请求 IP 而不是我们的应用实例收到请求时来自代理的 IP,那么上述语句即可获取 IP 仅均衡器代理的地址。
使用 Tomcat 的RemoteIpFilter
在上述情况下,可以使用 tomcat 提供的RemoteIpFilter
servlet 过滤器。
要进行配置,请使用 Java 配置RemoteIpFilter
– 在 spring boot 应用中,使用@Configuration
注解注册 bean。
@Configuration
public class WebConfiguration {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
}
或使用 XML 配置,例如web.xml
– 使用filter
标签。
<filter>
<filter-name>RemoteIpFilter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RemoteIpFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
注册上述过滤器后,启动应用。
现在,当您使用request.remoteAddr()
方法时,您将获得呼叫客户端的正确 IP 地址。
阅读更多:RemoteIpFilter
RemoteIpFilter
在内部集成了X-Forwarded-For
和X-Forwarded-Proto
HTTP 标头。
该 Servlet 过滤器的另一个功能是通过请求标头(例如“X-Forwarded-Proto
”),用代理或负载均衡器提供的方案替换表观方案(http / https)和服务器端口。
学习愉快!