import javax.servlet.http.HttpServletRequest;
public class IpUtil {
/**
* 获取请求方的IP地址
* @param request HTTP请求对象
* @return 请求方的IP地址
*/
public static String getIpAddr(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();
}
// 如果是多级代理,则取第一个非unknown的IP地址
if (ip != null && ip.contains(",")) {
String[] ips = ip.split(",");
for (String str : ips) {
if (!"unknown".equalsIgnoreCase(str)) {
ip = str;
break;
}
}
}
return ip;
}
}
getIpAddr
方法接收一个 HttpServletRequest
对象作为参数,用于获取客户端的 IP 地址。x-forwarded-for
, Proxy-Client-IP
, WL-Proxy-Client-IP
, HTTP_CLIENT_IP
, HTTP_X_FORWARDED_FOR
),以确保即使在经过代理服务器的情况下也能正确获取真实的客户端 IP 地址。null
或者是 "unknown"
,则继续检查下一个头信息。x-forwarded-for
头信息中包含多个 IP 地址(即多级代理的情况),则取第一个非 "unknown"
的 IP 地址。上一篇:java rsa解密
下一篇:this在java中的作用
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站