手机版 收藏 导航

在Java EE应用程序中如何获取客户端IP地址_在Java Grizzly框架中如何获取客户端IP地址

原创   www.link114.cn   2024-02-27 11:53:09

在Java EE应用程序中如何获取客户端IP地址_在Java Grizzly框架中如何获取客户端IP地址

在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();
}