首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >获取访问客户端ip

获取访问客户端ip

作者头像
johnhuster的分享
发布于 2022-03-28 19:57:01
发布于 2022-03-28 19:57:01
3.8K0
举报
文章被收录于专栏:johnhusterjohnhuster

有时需要对访问者ip进行记录,但是经过了nginx或者其他代理之后通过HttpServletRequest的getRemoteAddr方法获取到的ip不一定是真实访问者的ip,通过下面的方式可以较准确的获取访问者ip,但也不是万能的,仅作为借鉴!

代码语言:javascript
复制
private boolean isValidIp(String ip){
         return !(StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip));
     }
 
     private String getIp(HttpServletRequest request){
         //一些代理
           String ip = request.getHeader("X-Forwarded-For");  
         if (isValidIp(ip)) { 
             return ip;
         }
         //一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头
         ip = request.getHeader("Proxy-Client-IP");          
         if (isValidIp(ip)) { 
             return ip;
         }
         //WL-Proxy-Client-IP是apache的weblogic插件加上的头
         ip = request.getHeader("WL-Proxy-Client-IP");          
         if (isValidIp(ip)) {   
             return ip;
         }
         //有些代理服务器会加上此请求头
         ip = request.getHeader("HTTP_CLIENT_IP");        
         if (isValidIp(ip)) {  
             return ip;
         }
         ip = request.getHeader("HTTP_X_FORWARDED_FOR");         
         if (isValidIp(ip)) {
             return ip;
         }
         //nginx代理一般会加上此请求头
         ip = request.getHeader("X-Real-IP"); 
         if (isValidIp(ip)) {
             return ip;
         }        
         //这个ip虽然不一定是来自客户端的ip,但是不能被伪造,上面其他方式获取的ip却有可能被伪造!!!
         ip = request.getRemoteAddr();    
         return ip;
     }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档