在Java Web开发中,获取客户端的IP地址是非常常见的需求。有很多应用场景应用场景:
-
记录用户访问日志:当用户访问网站时,可以通过获取其IP地址来记录其访问日志,以便进行数据分析和统计。
-
防止恶意攻击:通过获取客户端的IP地址,可以检测到来自同一IP地址的大量请求,从而识别出可能的恶意攻击行为。
-
地理位置定位:通过获取客户端的IP地址,可以查询其所在的地理位置信息,例如国家、省份、城市等,以便提供更加个性化的服务。
-
网络监控:通过获取客户端的IP地址,可以对网络流量进行分析和监控,以便及时发现和解决网络故障
在Java中,可以通过HttpServletRequest对象获取客户端的IP地址。
import javax.servlet.http.HttpServletRequest;
public class IPUtil {
public static String getClientIP(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.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
推荐阅读
Spring Cloud Gateway 自定义全局过滤器拦截token