Java获取客户端真实IP 解决request.getRemoteAddr()
时间: 2023-10-13 12:04:52 浏览: 276
在 Java 中,可以通过 Servlet 中的 `HttpServletRequest` 对象的 `getHeader` 方法来获取客户端的真实 IP。下面是一些可能的方法:
1. 使用 `X-Forwarded-For` 头
在使用反向代理的情况下,客户端的 IP 地址可能会被代理服务器所覆盖。此时可以通过读取 `X-Forwarded-For` 头来获取客户端的真实 IP。
```java
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
```
2. 使用 `Proxy-Client-IP` 头
有些代理服务器会添加 `Proxy-Client-IP` 头,此时可以通过它来获取客户端的真实 IP。
```java
String ip = request.getHeader("Proxy-Client-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
```
3. 使用 `WL-Proxy-Client-IP` 头
WebLogic 服务器使用 `WL-Proxy-Client-IP` 头来存储客户端的真实 IP。
```java
String ip = request.getHeader("WL-Proxy-Client-IP");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
```
需要注意的是,以上方法并不能保证一定能够获取到客户端的真实 IP,因为有些代理服务器可能会删除或修改相关的头信息。
阅读全文