# 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）和服务器端口。

学习愉快！