JAVA 獲取客戶端請求IP
阿新 • • 發佈:2022-04-02
private static final String UN_KNOWN = "unKnown"; private static String getIpAddress() { if (ObjectUtils.isEmpty(RequestContextHolder.getRequestAttributes())) { return null; } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String xip= request.getHeader("X-Real-IP"); String xFor = request.getHeader("X-Forwarded-For"); if(!StringUtils.isEmpty(xFor) && !UN_KNOWN.equalsIgnoreCase(xFor)){ //多次反向代理後會有多個ip值,第一個ip才是真實ip int index = xFor.indexOf(","); if(index != -1){return xFor.substring(0,index); }else{ return xFor; } } xFor = xip; if(!StringUtils.isEmpty(xFor) && !UN_KNOWN.equalsIgnoreCase(xFor)){ return xFor; } if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) { xFor= request.getHeader("Proxy-Client-IP"); } if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) { xFor = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) { xFor = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) { xFor = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.isEmpty(xFor) || UN_KNOWN.equalsIgnoreCase(xFor)) { xFor = request.getRemoteAddr(); } return xFor; }