IP 地址获取

简介:

public String getIPAddr() {
        HttpServletRequest request = getRequest();
        String ip = request.getHeader("x-forwarded-for");
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Forwarded-For");  
        }
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP"); 
        }
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (StringUtils.isNullOrEmpty(ip)|| "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if(!StringUtils.isNullOrEmpty(ip)&&ip.indexOf(",")!=-1){
            ip = ip.substring(ip.lastIndexOf(",") + 1, ip.length()).trim();
        }
        logger.info("x-forwarded-for:"+request.getHeader("x-forwarded-for"));
        logger.info("Proxy-Client-IP:"+request.getHeader("Proxy-Client-IP"));
        logger.info("WL-Proxy-Client-IP:"+request.getHeader("WL-Proxy-Client-IP"));
        logger.info("HTTP_CLIENT_IP:"+request.getHeader("HTTP_CLIENT_IP"));
        logger.info("HTTP_X_FORWARDED_FOR:"+request.getHeader("HTTP_X_FORWARDED_FOR"));
        logger.info("http_client_ip:"+request.getHeader("http_client_ip"));
        logger.info("remote_ip:"+request.getRemoteAddr());
        return ip.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;
    }


public static boolean isNullOrEmpty(String str) {
        return str == null || "".equals(str) || "null".equals(str);
    }


isNullOrEmpty方法为自己写的,稍微修改下






      本文转自tianjian_0913 51CTO博客,原文链接:http://blog.51cto.com/tianjian/1675660,如需转载请自行联系原作者


相关文章
|
存储 运维 负载均衡
探索容灾架构演进之路 - 从单点到异地多活
容灾架构的选择在于平衡可用性需求和成本之间的关系。并不存在一种完美的架构,而是应该根据业务发展的阶段逐步演进容灾架构,避免陷入过度设计和资源浪费的困境
705 0
|
JavaScript Java 关系型数据库
足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)
足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)
268 0
开入开出电路
详细介绍了工控领域的开入开出电路的构成
|
Kubernetes 安全 数据安全/隐私保护
ACK场景下应用程序安全访问云资源最佳实践
在实际的容器安全实践中,怎么样避免应用程序永久访问密钥。本文会介绍基于云原生的产品能力来实现无AK方案。
578 6
ACK场景下应用程序安全访问云资源最佳实践
|
存储 Shell Linux
Pacemaker+corosync搭建双节点HA集群的可靠性验证
前一篇>中为确保共享资源的不被破坏,配置了3节点集群,本文想验证一下双节点时有什么风险。 Pacemaker的手册上也有描述,Pacemaker支持法定投票和资源抢占2种方式防止脑裂。
2205 0
|
算法 安全 UED
Radio Link Monitoring(RLM)
这篇看下radio link monitoring相关的内容,就是UE进行DL radio link quality监听的规定,这部分与RLF的判定息息相关。市面上讲NR相关的书籍,多少都会涉及这部分内容,可能spec上这块的描述也比较好理解,书上也往往几行描述就结束了,但是还是值得研究下相关内容,接下来就看下spec中的描述。
|
机器学习/深度学习 人工智能 算法
目标检测顶流的碰撞 | YOLOv5+DETR成就地表最强目标检测器DEYO,超越DINO!
目标检测顶流的碰撞 | YOLOv5+DETR成就地表最强目标检测器DEYO,超越DINO!
1376 0
目标检测顶流的碰撞 | YOLOv5+DETR成就地表最强目标检测器DEYO,超越DINO!
|
Shell 网络安全 iOS开发
Core Shell: 在macOS上高效管理SSH服务器
我不喜欢SecureCRT过时的界面,iTerm2作为终端工具确实很好用,强大的多屏操作很是吸引人,但是要管理很多台服务器,要熟悉各种配置文件就够你折腾的了。现在情况终于有了改变,感谢Codinn公司,给我们带来这样一款神器:**Core Shell**。
4241 0