1 /** 2 * 自定义访问对象工具类 3 * 4 * 获取对象的IP地址等信息 5 * 6 */ 7 public class CusAccessObjectUtil { 8 9 /** 10 * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 11 * 参考文章: http://developer.51cto.com/art/201111/305181.htm 12 * 13 * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? 14 * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 15 * 16 * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 17 * 192.168.1.100 18 * 19 * 用户真实IP为: 192.168.1.110 20 * 21 * @param request 22 * @return 23 */ 24 public static String getIpAddress(HttpServletRequest request) { 25 String ip = request.getHeader("x-forwarded-for"); 26 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 27 ip = request.getHeader("Proxy-Client-IP"); 28 } 29 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 30 ip = request.getHeader("WL-Proxy-Client-IP"); 31 } 32 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 33 ip = request.getHeader("HTTP_CLIENT_IP"); 34 } 35 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 36 ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 37 } 38 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 39 ip = request.getRemoteAddr(); 40 } 41 return ip.split(",")[0]; 42 } 43 44 }
原文地址:https://www.cnblogs.com/chuyi-/p/9959108.html
时间: 2024-12-12 18:51:27