企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Spring,Tomcat – 获取负载均衡器后面的真实 IP > 原文: [https://howtodoinjava.com/tomcat/tomcat-get-real-ip-behind-load-balancer/](https://howtodoinjava.com/tomcat/tomcat-get-real-ip-behind-load-balancer/) 通常,出于日志记录和安全目的,我们需要传入请求的 IP 地址信息。 在任何 Java Web 应用中,都可以使用`getRemoteAddr()`方法获取 IP 地址。 ```java String httpServletAddress = request.getRemoteAddr(); ``` 但是,如果您的应用在负载均衡器代理后面运行,并且您希望转换用户使用的真实请求 IP 而不是我们的应用实例收到请求时来自代理的 IP,那么上述语句即可获取 IP 仅均衡器代理的地址。 ## 使用 Tomcat 的`RemoteIpFilter` 在上述情况下,可以使用 tomcat 提供的[`RemoteIpFilter`](https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/RemoteIpFilter.html) servlet 过滤器。 要进行配置,请使用 Java 配置`RemoteIpFilter` – 在 spring boot 应用中,使用`@Configuration`注解注册 bean。 ```java @Configuration public class WebConfiguration { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } } ``` 或使用 XML 配置,例如`web.xml` – 使用`filter`标签。 ```java <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`](https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/filters/RemoteIpFilter.html) `RemoteIpFilter`在内部集成了`X-Forwarded-For`和`X-Forwarded-Proto` HTTP 标头。 该 Servlet 过滤器的另一个功能是通过请求标头(例如“`X-Forwarded-Proto`”),用代理或负载均衡器提供的方案替换表观方案(http / https)和服务器端口。 学习愉快!