当前位置 : 主页 > 编程语言 > java >

IP地址工具类:IPUtils

来源:互联网 收集:自由互联 发布时间:2023-03-22
在实际开发中可以通过以下工具类从HttpServletREquest中获取到用户真实IP地址。 import jakarta.servlet.http.HttpServletRequest;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;/** * @author

在实际开发中可以通过以下工具类从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地址
上一篇:c++产生随机数
下一篇:没有了
网友评论