package com.saye.hrs.commons; import org.springframework.util.StringUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @description: IP * @author zmc */ public class IPUtil { /** * @description: 获取ip * @param * @return java.lang.String * @author zmc */ public static String getIp() { ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); return getIp(request); } /** * @description: 获取ip * @param request * @return java.lang.String * @author zmc */ public static String getIp(HttpServletRequest request) { if (request == null) { return null; } String ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip.toLowerCase())) { //多次反向代理后会有多个ip值,第一个ip才是真实ip int index = ip.indexOf(","); if (index != -1) { return ip.substring(0, index); } else { return ip; } } ip = request.getHeader("X-Real-IP"); if (!StringUtils.isEmpty(ip) && !"unknown".equalsIgnoreCase(ip.toLowerCase())) { return ip; } return request.getRemoteAddr(); } /** * @description: 将IP地址的中间两段转星号隐藏处理 * @param ip * @return java.lang.String * @author zmc */ // public static String hideIP(String ip) { // if(null == ip) { // return null; // } // List newIPList = new ArrayList<>(); // String[] ipArr = org.apache.commons.lang3.StringUtils.splitByWholeSeparatorPreserveAllTokens(ip, "."); // int i = 0; // int len = ipArr.length; // for (String str : ipArr) { // if(i > 0 && i < len - 1) { // str = "*"; // } // newIPList.add(str); // i++; // } // String newIP = newIPList.stream().collect(Collectors.joining(".")); // return newIP; // } }