it编程 > 编程语言 > Java

java如何根据HttpServletRequest获取IP地址

6人参与 2025-03-08 Java

java根据httpservletrequest获取ip地址

解决办法:

以下整理了各个代理服务器自己开发的转发服务请求头,这些请求头都不是标准的http请求头,不一定所有的代理都会带上这些请求头,所以通过这方式只能尽可能的获取到真实ip,但不能保证一定可以获取到真实ip,而且代理服务器请求头中获取的ip是可伪造的。

参数:

方法一

public static string getipaddress(httpservletrequest request) {
    string ip = null;    //x-forwarded-for:squid 服务代理
    string ipaddresses = request.getheader("x-forwarded-for");
    if (ipaddresses == null || ipaddresses.length() == 0 || "unknown".equalsignorecase(ipaddresses)) {        //proxy-client-ip:apache 服务代理
        ipaddresses = request.getheader("proxy-client-ip");
    }
    if (ipaddresses == null || ipaddresses.length() == 0 || "unknown".equalsignorecase(ipaddresses)) {        //wl-proxy-client-ip:weblogic 服务代理
        ipaddresses = request.getheader("wl-proxy-client-ip");
    }
    if (ipaddresses == null || ipaddresses.length() == 0 || "unknown".equalsignorecase(ipaddresses)) {        //http_client_ip:有些代理服务器
        ipaddresses = request.getheader("http_client_ip");
    }
    if (ipaddresses == null || ipaddresses.length() == 0 || "unknown".equalsignorecase(ipaddresses)) {        //x-real-ip:nginx服务代理
        ipaddresses = request.getheader("x-real-ip");
    }    //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实ip
    if (ipaddresses != null && ipaddresses.length() != 0) {
        ip = ipaddresses.split(",")[0];
    }    //还是不能获取到,最后再通过request.getremoteaddr();获取
    if (ip == null || ip.length() == 0 || "unknown".equalsignorecase(ipaddresses)) {
        ip = request.getremoteaddr();
    }
    return ip;
}

方法二

public static string getipaddr(httpservletrequest request)
    {
        if (request == null)
        {
            return "unknown";
        }
        string ip = request.getheader("x-forwarded-for");
        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("x-forwarded-for");
        }
        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("x-real-ip");
        }

        if (ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip))
        {
            ip = request.getremoteaddr();
        }
        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : escapeutil.clean(ip);
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

SpringBoot如何实现调用controller和Service层方法

03-08

Java实现markdown格式内容转换为word

03-08

java中实现一个定时任务的方式

03-08

利用EasyPOI实现多sheet和列数的动态生成

03-08

java double保留两位小数问题

03-08

Java将文件按照指定格式切分成多个文件

03-08

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论