获取用户真实IP地址:不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址;
可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?

答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。

如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
则真实Id为:192.168.1.100

工具代码

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;import javax.servlet.http.HttpServletRequest;/*** 获取用户访问ip地址*/
public class IpUtil {public static String getIpAddress(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();  }// 获取到多个ip时取第一个作为客户端真实ipif (StringUtils.isNotEmpty(ip) && ip.contains(",")) {String[] ipArray = ip.split(",");if (ArrayUtils.isNotEmpty(ipArray)) {ip = ipArray[0];}}return ip;  }
}

Controller调用代码

@RequestMapping("/urlName.do")
public String MethodName(HttpServletRequest request){String ip = IpUtil.getIpAddress(request);return ip;
}

参考文章: http://developer.51cto.com/art/201111/305181.htm

JAVA:获取用户访问ip地址相关推荐

  1. PHP获取用户访问IP地址的5种方法

    PHP获取用户访问IP地址的5种方法: //方法1: <?php                                                                 ...

  2. java获取用户真实IP地址

    /*** 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址.* 可是,如果通过了多级反向代理的话,X-Forwarded ...

  3. java获取用户ip_Java获取用户访问IP及地理位置的方法详解

    本文实例讲述了Java获取用户访问IP及地理位置的方法.分享给大家供大家参考,具体如下: 获取用户访问的IP地址 /** * 获取用户ip地址 * @return */ public static S ...

  4. java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...

  5. CDN下nginx获取用户真实IP地址

    为什么80%的码农都做不了架构师?>>>    随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能 ...

  6. PHP获取用户真实IP地址

    PHP获取用户真实IP地址 <?phpfunction getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SER ...

  7. 用java获取本机IP地址

    在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一下,到网上搜索了一下ja ...

  8. java获取客户端的IP地址工具类

    java获取客户端的IP地址工具类 import java.net.InetAddress; import java.net.UnknownHostException;import javax.ser ...

  9. DJANGO获取用户访问IP

    使用django来获取用户访问的IP地址,如果用户是正常情况下 1 request.META['REMOTE_ADDR'] 可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者 ...

最新文章

  1. 漫话:如何给女朋友解释为什么 Java 中1000==1000为 false,而100==100为 true?
  2. 云计算技术 — 云计算的商业模式与部署模式
  3. verilog换行太长代码_Verilog 之 File I/O task and function
  4. alexa技能个数_如何改善Alexa技能的对话流程
  5. python set函数原理,Python之set详解
  6. 【吴恩达机器学习】学习笔记——4多元线性回归
  7. 弱网条件下基于阻抗小扰动稳定性分析,小信号模型,阻抗扫描(电容电流反馈有源阻尼),单逆变器SRF-PLL
  8. wep加密方式是什么_什么是WEP(有线等效保密)?
  9. 一次累加序列折线图解释_如何解释非累加性措施第1部分按比例分配
  10. [机器学习]随机森林源码(python)
  11. 简述计算机桌面背景更换的流程,苹果电脑桌面壁纸怎么更换【详细步骤】
  12. 传统企业触网,打造完美用户体验是关键
  13. 淘宝 美团 评论标签效果
  14. 前端工程师必须知道的网络知识(一)
  15. 总结下自己的入门学黑之路
  16. MyBatis-Plus代码生成器(新)使用
  17. python plc_基于python的西门子plc数据采集系统
  18. 第11节:唤醒心灵的巨人
  19. hive中设置jobname
  20. 父母必看(现代教育与私塾教育的面面观)

热门文章

  1. 注意力是PEOPLE最宝贵的财富
  2. 千里走单骑:02-北京到上海骑记--Day1.首日征程
  3. mysql数据库编程题题_mysql数据库编程题测试
  4. 《生物信息学:导论与方法》----变异的功能预测----听课笔记(十一)
  5. CRMEB-知识付费系统程序配置之直播配置(方法二下)
  6. Jquery之遍历元素
  7. html向下的三角符号怎么打,哪些字符可用于上/下三角形(无茎的箭头)以HTML显示?...
  8. java加锁与同步方法
  9. 【第二届青训营-寒假前端场】- 「WebGL基础」笔记
  10. linux avg 强力卸载,彻底卸载AVG维护清理软件