获取本地请求的真实IP地址
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 }
获取本地请求的真实IP地址的更多相关文章
- 服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址
首先,在nginx配置中添加如下配置 server { listen ; server_name www.wenki.info; #要访问的域名 charset utf8; location / { ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- TFS应用层服务器获取F5用户的真实IP地址(高可用性)
当用户数量达到一定级别(例如2千)以上,为保证TFS系统的持续服务,最大程度减少因系统宕机对研发团队的影响,系统管理员一般会考虑应用层和数据库层的高可用性方案. 在应用层的高可用性方案中,目前比较常见 ...
- 获取本地计算机名称和Ip地址
using System.Net; Dns.GetHostName();//获取本地计算机主机名 IPAddress[] IP = Dns.GetHostAddresses(Dns.GetHostNa ...
- 阿里云X-Forwarded-For 发现tomcat记录的日志所有来自于SLB转发的IP地址,不能获取到请求的真实IP。
1.背景:阿里云的SLB的负载均衡,在tomcat中获取不到真实IP,而是阿里的内网IP,SLB中俩台或者3台本身是局域网,这里是SLB原理,能够看看.没怎么看懂.呵呵,要细细读下. 2.须要开启to ...
- 获取本地计算机名和IP地址
WSADATA wsadata; != WSAStartup(MAKEWORD(, ), &wsadata)) { AfxMessageBox("初始化网络环境失败!"); ...
- LINUX C: 获取本地指定网卡的IP地址
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> ...
- zero ice 如何获取本地以及对端IP 地址及端口号
// 在客户端显示端点连接IP及端口号信息 static void show_endpoint(const Ice::ObjectPrx &proxy) { Ice::ConnectionPt ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
随机推荐
- 测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
龙芯3A5000 已经上市,与龙芯3A5000配套的三大编译器GCC.LLVM.GoLang和三大虚拟机Java.JavaScript..NET均已完成开发,从老伙计哪里搞来一台3A5000 机器,安 ...
- P4293 [WC2010]能量场
P4293 [WC2010]能量场 题意 给你 \(n\) 个粒子,每个粒子有两个权值 \(m_i,c_i\) 每个相邻有序对 \((a,b)\) 会产生 \(m_am_b(c_a-c_b)\) 的贡 ...
- Java字节码增强技术
简单介绍下几种java字节码增强技术. ASM ASM是一个Java字节码操控框架,它能被用来动态生成类或者增强既有类的功能.ASM可以直接产生class文件,也可以在类被加载入Java虚拟机之前动态 ...
- Skywalking-02:如何写一个Skywalking trace插件
如何写一个Skywalking trace插件 javaagent 原理 美团技术团队-Java 动态调试技术原理及实践 类图 实现 ConsumeMessageConcurrentlyInstrum ...
- CExec.jsp中请求过程
- 【前端 · 面试 】HTTP 总结(十二)—— URL 和 URI
最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 引言 不知道有多少人是和我一样分不 ...
- MySQL-19-分布式架构MyCat
MyCAT基础架构图(实验环境) MyCAT实验环境准备 1 环境准备 两台虚拟机: db01(10.0.0.51) db02(10.0.0.52) 每台创建四个mysql实例:3307 3308 3 ...
- MySQL-05-DDL/DCL/DML语句
DDL数据定义语言 库定义 1 创建数据库 mysql> create database school; mysql> create schema sch; mysql> show ...
- scrapy爬虫框架使用
一.scrapy框架 1.什么是scrapy: 爬虫中封装好的一个明星框架.功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式. 2.使用方法: 安装: 下载tiwisted,此处位下 ...
- pikachu RCE远程系统命令执行
远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口比如我们常见的路由器.防火墙.入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界 ...