javaweb的request获取真实IP地址
来源:互联网 发布:暗黑战神源码解读 编辑:程序博客网 时间:2024/05/29 03:29
如果我们服务器使用了nginx、squid等反向代理,就不能再用request的获取IP地址方法,因为这时候获取到的代理服务器的地址,是获取不到真实客户端的IP地址。
1、2访问方式是经过代理,3是直接访问服务器。经过代理后,由于在客户端和服务端增加了中间层,所以服务器获取不到真实的IP地址,但是在转发的请求的HTTP头信息,增加了X-FORWARDED-FOR信息,用来跟踪原有的客户端IP地址和原来客户端请求的服务地址。
编写一个工具类来获取到客户端的真实IP地址
- public final class IPUtil {
- /**
- * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
- *
- * @param request
- * @return
- * @throws IOException
- */
- public final static String getIpAddress(HttpServletRequest request) throws IOException {
- // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
- String ip = request.getHeader("X-Forwarded-For");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- 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();
- }
- } else if (ip.length() > 15) {
- String[] ips = ip.split(",");
- for (int index = 0; index < ips.length; index++) {
- String strIp = (String) ips[index];
- if (!("unknown".equalsIgnoreCase(strIp))) {
- ip = strIp;
- break;
- }
- }
- }
- return ip;
- }
- }
文章参考http://blog.csdn.net/yin_jw/article/details/24470131,真实可用。
阅读全文
0 0
- javaweb的request获取真实IP地址
- request.getRemoteAddr()如何获取用户真实的IP地址
- request.getRemoteAddr()如何获取用户真实的IP地址
- request.getRemoteAddr()怎么获取用户真实的IP地址
- 获取真实的IP地址
- 获取真实的IP地址
- request获取真实ip
- javaweb获取客户用户的真实ip。
- javaweb获取用户真实ip
- ASP获取真实的IP地址
- 获取客户端的真实IP地址
- 获取远程客户端的真实IP地址
- 获取本机的真实IP地址
- 获取客户端的真实IP地址
- 获取客户端的真实IP地址
- 获取客户端的真实IP地址
- 获取客户真实的IP地址
- java获取真实的客户端IP地址
- Android如何实现微信支付
- 多线程造成死锁的两种情况
- C++中static
- Android---Intent的介绍
- Caused by: org.jbpm.api.JbpmException: resource classpath:jdpm/jbpm.cfg.xml does not exist
- javaweb的request获取真实IP地址
- 代码整洁之道--函数
- [公告] 2017年9月装机员系统更新
- 通过H5的新标签canvas做出一个时钟的全过程,希望对初学者有帮助
- HDU 3072 Intelligence System(Tarjan+最小树形图)
- Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
- GVIM win7添加到右键菜单方法
- Python 科学计算之实验环境安装及使用
- Spring学习笔记(一)环境搭建和测试开发环境