请求被多次转发后,后端如何获取客户ip地址,java代码
时间: 2024-03-17 18:43:51 浏览: 14
在 Java 中获取客户端 IP 地址可以使用 Servlet API 中的 HttpServletRequest 对象,代码示例如下:
```java
import javax.servlet.http.HttpServletRequest;
public class ExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_CLIENT_IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
}
System.out.println("Client IP Address: " + ipAddress);
}
}
```
上述代码中,首先获取 X-Forwarded-For 字段,如果该字段为空,则依次尝试获取其他代理服务器的 IP 地址,最后获取客户端的真实 IP 地址。如果所有的字段都为空,则使用 getRemoteAddr() 方法获取客户端的 IP 地址。