Java获取请求主机IP地址IPUtil详解编程语言

如果通过代理进来,则透过防火墙获取真实IP地址

public class IPUtil { 
  
    private static Logger logger = Logger.getLogger(IPUtil.class); 
    /** 
     * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址; 
     */ 
    public final static String getIpAddress(HttpServletRequest request) throws IOException { 
        String ip = request.getHeader("X-Forwarded-For"); 
  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            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(); 
            } 
        } else if (ip.length() > 15) { 
            String[] ips = ip.split(","); 
            for (int index = 0; index < ips.length; index++) { 
                String strIp = (String) ips[index]; 
                if (!("unknown".equalsIgnoreCase(strIp))) { 
                    ip = strIp; 
                    break; 
                } 
            } 
        } 
        return ip; 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10480.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论