1 /**
2 * 自定义访问对象工具类
3 *
4 * 获取对象的IP地址等信息
5 *
6 */
7 public class CusAccessObjectUtil {
8
9 /**
10 * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址,
11 * 参考文章: http://developer.51cto.com/art/201111/305181.htm
12 *
13 * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
14 * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
15 *
16 * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
17 * 192.168.1.100
18 *
19 * 用户真实IP为: 192.168.1.110
20 *
21 * @param request
22 * @return
23 */
24 public static String getIpAddress(HttpServletRequest request) {
25 String ip = request.getHeader("x-forwarded-for");
26 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
27 ip = request.getHeader("Proxy-Client-IP");
28 }
29 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
30 ip = request.getHeader("WL-Proxy-Client-IP");
31 }
32 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
33 ip = request.getHeader("HTTP_CLIENT_IP");
34 }
35 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
36 ip = request.getHeader("HTTP_X_FORWARDED_FOR");
37 }
38 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
39 ip = request.getRemoteAddr();
40 }
41 return ip.split(",")[0];
42 }
43
44 }

最新文章

  1. Maven 入门 (1)—— 安装
  2. Tomcat配置并启用HTTPS
  3. VEP安装指南
  4. [js] 有趣的js面试题,你答对了吗?
  5. Linux下动态库的使用
  6. 网址测速JS
  7. Gradle sourceCompatibility has no effect to subprojects(转)
  8. NYoj_49开心的小明
  9. Appium适配Android7.0以上版本
  10. 腾讯企业邮箱又一次隐藏了qq邮件列表的入口
  11. 修改权限linux
  12. fly.js抛物线连续不断加入购物车
  13. Daily Sentence(英语每日一句)
  14. poj1734 Sightseeing trip【最小环】
  15. 20165236 2017-2018-2 《Java程序设计》第八周学习总结
  16. Java9的新特性
  17. 转载-找圆算法((HoughCircles)总结与优化-霍夫变换
  18. 移动端浏览器touch事件的研究总结
  19. bzoj 5028: 小Z的加油店——带修改的区间gcd
  20. Go 模板语法

热门文章

  1. python -- 程序结构
  2. 上手Coc.nvim 完全指南
  3. ThinkPHP3.2.3使用PHPExcel类操作excel导入读取excel
  4. 以太坊-Win环境下remix环境搭建
  5. 【队列+模拟】机器翻译 luogu-1540
  6. Windows环境安装kafka
  7. 【阅读笔记】Java核心技术卷一 #5.Chapter7
  8. 利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化)
  9. SQL SERVER 作业问题(SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。),以及其它定时sql执行方式探索
  10. ES6新特征