package deep.util; import javax.servlet.http.HttpServletRequest; /** * ä¸è¬çwebç¨åºï¼é½æ¯ç»è¿nginxæapacheå¤çº§è½¬ååæå°Web容å¨ä¸ï¼çå®çIPæå¯è½è¢«æ¦æªå°å¤å± * æå¡ï¼æ¤æ¶æä»¬å徿ç»ç¨æ·çipä¼åºç°é误ã * å¨å¤å±ä»£çæè è½¬åæ åµä¸æ¯X-Forwarded-For (XFF)æ¯å¦ä½äº§ççå¢ï¼ * XFF 卿å¤é¢çä¸å±(ä¸è¬æ¯CDNå é)使ç¨$remote_addråå¾çå®çç¨æ·ip,å¨å䏿¸¸åéæ¶ä¼ * å°è¿ä¸ªipåé¢éä¸èªå·±çipï¼ç¶å转åï¼ä¸æ¸¸çæå¡å¨ä¼å¾å°å¦ä¸å½¢å¼çXFF: * ip, srvip 注æï¼åä¸ä¸ªipæ¯ç¨æ·çå®ipï¼åä¸ä¸ªæ¯CDNçip,两è ä¸é´æ¯ä¸ä¸ªéå·åä¸ä¸ªç©ºæ ¼ * ä¸è¬æ¥è¯´ï¼æ¯ä¸å±è½¬åé½å¨åXFFä¸éå ä¸ä¸ä¸ª éå·åä¸ä¸ªç©ºæ ¼ï¼åå ä¸èªå·±çipï¼ç¶ååéç»ä¸æ¸¸Server * ææ¶CDNæå¡å为äºèªå·±çå®å ¨èèï¼ä¸ä¼å°èªå·±çipå å ¥å°XFFèæ¯ç´æ¥åéç»ä¸æ¸¸ã * * @author dozray * */ public final class HttpUtil { private HttpUtil() { }; public static String getIPAddr(HttpServletRequest req) { String ips = req.getHeader("x-forwarded-for"); String ip = null; if (ips == null || ips.length() == 0 || "unknown".equalsIgnoreCase(ips)) { ips = req.getHeader("Proxy-Client-IP"); } else{ ip = ips.split(",")[0]; } if(ips == null || ips.length() ==0 || "unknown".equalsIgnoreCase(ips) ){ ip = req.getHeader("WL-Proxy-Client-IP"); } if(ips == null || ips.length() == 0 || "unknown".equalsIgnoreCase(ips)){ ip = req.getRemoteAddr(); } if(ips == null || ips.length() == 0 || "unknown".equalsIgnoreCase(ips)){ ip = req.getHeader("HTTP_CLIENT_IP"); } if(ips == null || ips.length() == 0 || "unknown".equalsIgnoreCase(ips)){ ip = req.getRemoteAddr(); } return ip ; } }