Java获取客户端用户真实IP地址


在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,或多级代理,经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。

正确的获取方式如下

public static String getIp(HttpServletRequest request) {
    String ip = request.getHeader("X-Forwarded-For");
    if (ip != null) {
        if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {
            int index = ip.indexOf(",");
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        }
    }
    ip = request.getHeader("X-Real-IP");
    if (ip != null) {
        if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {
            return ip;
        }
    }
    ip = request.getHeader("Proxy-Client-IP");
    if (ip != null) {
        if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {
            return ip;
        }
    }
    ip = request.getHeader("WL-Proxy-Client-IP");
    if (ip != null) {
        if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {
            return ip;
        }
    }
    ip = request.getRemoteAddr();
    return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
}

声明:Wayen|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Java获取客户端用户真实IP地址


-当你感到最无助困难的时候,那就是离成功最近的时候。-Martin Frohm