在如今的程序开发中,获取客户端的 IP 地址已成为不可或缺的一环。它不仅能够帮助我们精准追踪用户行为,分析流量来源,还能在出现问题时快速定位到错误的发生者。
今天,我们分享一个用 Java 编写的客户端 IP 地址获取工具类,示例代码如下:
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
/**
* 网络工具类
*
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
* @from <a href="https://yupi.icu">编程导航知识星球</a>
*/
public classNetUtils {
/**
* 获取客户端 IP 地址
*
* @param request 请求
* @return {@link String}
*/
publicstatic String getIpAddress(HttpServletRequest request) {
Stringip = request.getHeader("x-forwarded-for");
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
if ("127.0.0.1".equals(ip)) {
// 根据网卡取本机配置的 IP
InetAddressinet = null;
try {
inet = InetAddress.getLocalHost();
} catch (Exception e) {
e.printStackTrace();
}
if (inet != null) {
ip = inet.getHostAddress();
}
}
}
// 多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ip != null && ip.length() > 15) {
if (ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
if (ip == null) {
return"127.0.0.1";
}
return ip;
}
}
在这个例子中,我们首先尝试从请求头中获取 x-forwarded-for,这是代理服务器标准字段,用于表示原始请求的来源 IP 地址。如果这个字段不存在或者为未知,我们继续尝试获取其他可能的代理 IP 地址字段。如果所有代理 IP 地址字段都不存在或未知,我们最后尝试获取请求的远程地址,即客户端 IP 地址。
如果远程地址是本地回环地址(127.0.0.1),我们尝试获取本机的 IP 地址。在获取 IP 地址的过程中,我们还需要处理可能存在的多个代理 IP 地址的情况,只保留第一个 IP 地址作为客户端的真实 IP。
今天的代码大赏就到这里。希望通过这篇文章,你能够对如何利用 Java 获取客户端 IP 地址的工具类有一个更深入的理解。如果你对 Java 工具类感兴趣,或者想要了解更多不同场景下的工具类实现,欢迎在评论区留下自己的想法和建议。
完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!
在线访问:https://www.codecopy.cn/post/7ytalw
在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~
往期推荐