在Java EE应用程序中,可以通过HttpServletRequest
对象来获取客户端的IP地址。具体做法如下:
String ipAddress = request.getRemoteAddr();
上述代码会返回客户端的IP地址,客户端使用代理服务器,则返回的可能是代理服务器的IP地址。需要获取客户端的真实IP地址,可以通过以下方式:
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.getRemoteAddr();
}
在Java Grizzly框架中,可以通过HttpRequestPacket
对象来获取客户端的IP地址。具体做法如下:
final HttpRequestPacket requestPacket = request.getRequest();
final InetAddress inetAddress = requestPacket.getRemoteAddress();
final String ipAddress = inetAddress.getHostAddress();
上述代码会返回客户端的IP地址,客户端使用代理服务器,则返回的可能是代理服务器的IP地址。需要获取客户端的真实IP地址,可以通过以下方式:
final String forwardedForHeader = requestPacket.getHeader("X-Forwarded-For");
if (forwardedForHeader != null) {
final String[] forwardedIps = forwardedForHeader.split(",");
ipAddress = forwardedIps[0].trim();
} else {
ipAddress = inetAddress.getHostAddress();
}