获取本地请求的真实IP地址
2024-09-02 11:54:30
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 }
最新文章
- Maven 入门 (1)—— 安装
- Tomcat配置并启用HTTPS
- VEP安装指南
- [js] 有趣的js面试题,你答对了吗?
- Linux下动态库的使用
- 网址测速JS
- Gradle sourceCompatibility has no effect to subprojects(转)
- NYoj_49开心的小明
- Appium适配Android7.0以上版本
- 腾讯企业邮箱又一次隐藏了qq邮件列表的入口
- 修改权限linux
- fly.js抛物线连续不断加入购物车
- Daily Sentence(英语每日一句)
- poj1734 Sightseeing trip【最小环】
- 20165236 2017-2018-2 《Java程序设计》第八周学习总结
- Java9的新特性
- 转载-找圆算法((HoughCircles)总结与优化-霍夫变换
- 移动端浏览器touch事件的研究总结
- bzoj 5028: 小Z的加油店——带修改的区间gcd
- Go 模板语法
热门文章
- python -- 程序结构
- 上手Coc.nvim 完全指南
- ThinkPHP3.2.3使用PHPExcel类操作excel导入读取excel
- 以太坊-Win环境下remix环境搭建
- 【队列+模拟】机器翻译 luogu-1540
- Windows环境安装kafka
- 【阅读笔记】Java核心技术卷一 #5.Chapter7
- 利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化)
- SQL SERVER 作业问题(SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。),以及其它定时sql执行方式探索
- ES6新特征