HttpServletRequest 如何获取真实ip地址
时间: 2024-09-10 12:24:29 浏览: 90
在Web开发中,`HttpServletRequest` 提供了获取客户端IP地址的方法。但是,由于客户端可能通过代理或者负载均衡器访问服务器,直接使用 `HttpServletRequest.getRemoteAddr()` 方法可能无法获取到客户端的真实IP地址。为了获取真实IP地址,可以按照以下步骤获取:
1. 首先,尝试从 `X-Forwarded-For` 请求头中获取IP地址。如果客户端通过代理访问,这个请求头可能会包含客户端的IP地址。这个请求头通常由代理服务器添加,可能会包含多个IP,需要从后向前检查,因为代理可能有多个层级。
2. 如果 `X-Forwarded-For` 不存在,再尝试 `HttpServletRequest.getRemoteAddr()` 方法获取IP地址。这个方法获取的是直接连接到服务器的客户端IP地址。
以下是一个示例代码段:
```java
public String getRemoteIP(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
```
需要注意的是,`X-Forwarded-For` 可能被伪造,因此在安全要求较高的情况下,还需要结合其他验证机制来确保获取到的IP地址是可信的。
阅读全文