Java获取客户端ip
来源:互联网 发布:怎么做淘宝充值代理 编辑:程序博客网 时间:2024/05/22 03:32
某些情况下需要或取用户客户端的ip,用来统计或者拦截,比如有些网站是需要屏蔽海外ip的访问的,这就需要获取客户端的访问ip。一般情况下用HttpServletRequest对象的getRemoteAddr()方法即可获取。但是当请求经过HTTP代理或反向代理(如ngrok、nginx等)后这样获取ip是不正确的,这有点类似于跳板机。服务经过反向代理后拿到的IP已经不是"第一层"IP了,而是代理服务器这个"中介"的IP了,有时候甚至存在多级反向代理,那这个时候如何准确的获取客户端的IP呢?原来在存在代理的情况下,请求头会加上一些特定信息,如:x-forwarded-for、Proxy-Client-IP、WL-Proxy-Client-IP等来指向ip地址,于是乎获取ip变得简单起来:
public static String getIpAddr(HttpServletRequest request) { 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("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip;}
存在多级代理时,则取第一个非unknown的IP
public static String getIpAddrWithMultiIp(HttpServletRequest request) { 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("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(); } // 如果是多级代理,取第一个非unknown的ip作为客户端的ip if (ip != null && ip.indexOf(",") != -1) { String[] ips = ip.split(","); for (int i = 0; i < ips.length; i++) { String ipMulti = (String) ips[i]; if (!("unknown".equalsIgnoreCase(ipMulti))) { ip = ipMulti; break; } } } return ip;}
如上就可以顺利拿到客户端的ip了。顺带提下,项目中有时候需要判断上一级页面来源,用处请自行脑补。
String referer = request.getHeader("Referer");这样即可以判断当前页面的上一级.
阅读全文
1 0
- java获取客户端ip
- JAVA 获取客户端 IP
- java获取客户端ip
- JAVA 获取客户端IP
- java获取客户端IP
- JAVA获取客户端IP
- java获取客户端Ip
- JAVA获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- java 获取客户端ip
- Java获取客户端IP
- Java获取客户端IP
- Java获取客户端IP
- 密码学:基于python的rsa算法
- 阿里高级Java面试题(首发,70道,带详细答案)
- mybatis的鉴别列查询
- JVM(PART XXIII)Java内存模型
- TP5踩坑之-查詢日期範圍
- Java获取客户端ip
- Java线程学习笔记
- struts2入门基础
- springboot配置访问sqlserver,mysql数据库以及ssm的公共业务逻辑层抽取
- 排错-新郎不容易
- vue-router 的 hash 模式与 history 模式
- 优惠不止双11!乐语Brookstone十店同开超火爆!
- H5实现简单音乐播放器
- 二分与分治