如何使用IPUtils工具类进行IP地址处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计421个文字,预计阅读时间需要2分钟。
在实际情况开发中,可以通过以下工具类从HttpServletRequest中获取到用户真实IP地址。 javaimport jakarta.servlet.http.HttpServletRequest;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;
/** * @author */public class RealIpUtil { public static String getRealIp(HttpServletRequest request) { String ip=request.getHeader(X-Forwarded-For); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { // 多次反向代理后会有多个IP值,第一个为真实IP。 int index=ip.indexOf(','); if (index !=-1) { ip=ip.substring(0, index); } } else { ip=request.getHeader(Proxy-Client-IP); } if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(WL-Proxy-Client-IP); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(HTTP_CLIENT_IP); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(HTTP_X_FORWARDED_FOR); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { return request.getRemoteAddr(); } } } } }}
在实际开发中可以通过以下工具类从HttpServletREquest中获取到用户真实IP地址。
import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; /** * @author hc * 从http请求中获取ip地址 */ @Slf4j public class IPUtils { public static String getIpAddr(HttpServletRequest request) { String ip = null; try { ip = request.getHeader("x-forwarded-for"); if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (StringUtils.hasLength(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } } catch (Exception e) { log.error("IPUtils ERROR ", e); } // 使用代理,则获取第一个IP地址 if (StringUtils.hasLength(ip) && ip.length() > 15) { if (ip.indexOf(",") > 0) { ip = ip.substring(0, ip.indexOf(",")); } } return ip; } }上面代码中的getIpAddr方法用来获取IP地址,注意:
- 如果使用了Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
- 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
本文共计421个文字,预计阅读时间需要2分钟。
在实际情况开发中,可以通过以下工具类从HttpServletRequest中获取到用户真实IP地址。 javaimport jakarta.servlet.http.HttpServletRequest;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;
/** * @author */public class RealIpUtil { public static String getRealIp(HttpServletRequest request) { String ip=request.getHeader(X-Forwarded-For); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { // 多次反向代理后会有多个IP值,第一个为真实IP。 int index=ip.indexOf(','); if (index !=-1) { ip=ip.substring(0, index); } } else { ip=request.getHeader(Proxy-Client-IP); } if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(WL-Proxy-Client-IP); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(HTTP_CLIENT_IP); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { ip=request.getHeader(HTTP_X_FORWARDED_FOR); if (StringUtils.hasText(ip) && !unknown.equalsIgnoreCase(ip)) { return ip; } else { return request.getRemoteAddr(); } } } } }}
在实际开发中可以通过以下工具类从HttpServletREquest中获取到用户真实IP地址。
import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; /** * @author hc * 从http请求中获取ip地址 */ @Slf4j public class IPUtils { public static String getIpAddr(HttpServletRequest request) { String ip = null; try { ip = request.getHeader("x-forwarded-for"); if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (StringUtils.hasLength(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.hasLength(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } } catch (Exception e) { log.error("IPUtils ERROR ", e); } // 使用代理,则获取第一个IP地址 if (StringUtils.hasLength(ip) && ip.length() > 15) { if (ip.indexOf(",") > 0) { ip = ip.substring(0, ip.indexOf(",")); } } return ip; } }上面代码中的getIpAddr方法用来获取IP地址,注意:
- 如果使用了Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
- 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址

