package com.ruoyi.im.config; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * 获取IP地址工具类 */ public class IpUtils { /** * 获取客户端真实IP地址 * 考虑了反向代理、负载均衡等情况 */ 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(); } // 对于通过多个代理的情况,第一个IP为客户端真实IP if (ip != null && ip.contains(",")) { ip = ip.split(",")[0].trim(); } // 处理本地地址 if ("0:0:0:0:0:0:0:1".equals(ip) || "127.0.0.1".equals(ip)) { // 根据实际网卡取本机配置的IP ip = getLocalIp(); } return ip; } /** * 获取本机IP地址 */ public static String getLocalIp() { try { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { return "127.0.0.1"; } } /** * 获取请求的完整URL */ public static String getRequestUrl(HttpServletRequest request) { StringBuffer url = request.getRequestURL(); String queryString = request.getQueryString(); if (queryString != null) { url.append("?").append(queryString); } return url.toString(); } /** * 获取用户代理信息 */ public static String getUserAgent(HttpServletRequest request) { return request.getHeader("User-Agent"); } /** * 获取请求方法 */ public static String getMethod(HttpServletRequest request) { return request.getMethod(); } }