在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
String ipString = request.getHeader("x-forwarded-for");
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getRemoteAddr();
}
// 多个路由时,取第一个非unknown的ip
final String[] arr = ipString.split(",");
for (final String str : arr) {
if (!"unknown".equalsIgnoreCase(str)) {
ipString = str;
break;
}
}
相关推荐
但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。所以...
JAVA获取客户端MAC,web获取客户端MAC,Applet获取客户端MAC;JAVAweb开发;服务器端很难获取到客户端的MAC受路由器等....获取的到不正确或者被过滤掉;小弟,无奈写了一个客户端的Applet来获取客户端MAC然后再在传...
超全面javaweb教程28天第10天_10_request之获取客户端IP地址、获取请求方式、判断客户端浏览器类型和版本
第一次写的Javaweb程序,程序不多,可是描述却要很多,这就是一件很郁闷的事了
javaweb客户端脚本程序.doc
服务器端(javaWeb)与客户端(android)进行通信,传送json数据, 使用xutls进行网络访问, 注释很详细,教你做后台.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在JavaWeb开发中,客户端脚本程序主要指的是运行在用户浏览器上的JavaScript代码,用于增强用户体验和实现动态交互。这个实验报告主要关注了四个关键概念:Session、Request、Response和Application,以及JavaScript...
在Java Web开发中,获取表单数据是常见的任务,它涉及到客户端与服务器之间的交互。本文将详细介绍在Javaweb环境中获取表单数据的多种方式,以帮助开发者更好地理解和处理用户提交的信息。 首先,最常用的方式是...
JavaWeb学习是Android客户端目前最全面的免费离线JavaWeb学习书籍,主要内容包括: 1、Html标签、表格、表单等基础内容 2、Javascript基础 3、Javascript脚本高级特效 4、B/S架构工作原理 5、Jsp标签、表达式、...
JavaWeb是Java编程领域中的一个重要组成部分,主要涉及Web应用程序的开发和实现。黑马程序员是一家知名的IT教育机构,他们提供的Javaweb教材源码是为了帮助学员深入理解和实践Web开发技术。下面将详细介绍JavaWeb的...
JavaWeb应用是使用Java语言开发的、运行在服务器端的应用程序,能够处理来自客户端(如浏览器)的请求,并返回相应的动态内容。这些应用通常由HTML、CSS、JavaScript以及Java Servlets、JSP(JavaServer Pages)等...
在Web开发中,我们可以通过HttpServletRequest对象获取客户端的IP地址。下面是一个示例代码: ```java package demo.login; import ins.framework.web.Struts2Action; import java.text.SimpleDateFormat; import ...
1. **API调用**:Android客户端通过HTTP请求调用JavaWeb服务器提供的RESTful API,获取或发送数据。通常会有登录验证、数据查询、数据提交等接口。 2. **数据同步**:客户端和服务器之间的数据同步是关键,可能涉及...
javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码...
这个"真实好用的javaweb上使用的googlemap的demo"提供了实现上述功能的示例代码,可以帮助开发者快速理解和应用Google Maps API于JavaWeb项目中。通过学习和实践这个Demo,你可以创建具有地图功能的动态Web应用,...
Java Structs2.1 Spring3.0 Hibernate3.3 CSDN上没看到有人上传过,在别的地方找的,分享一下 part2/4,刚才上传后好像不成功,重新上传一下
JavaWeb技术是构建互联网应用程序的重要框架,它将Java语言与Web技术相结合,为开发者提供了强大的功能和灵活性。本文将深入探讨JavaWeb的核心概念、架构及其在实际开发中的应用。 一、JavaWeb概述 JavaWeb是一种...
在JavaWeb应用中,图片上传通常涉及到客户端(如浏览器)与服务器之间的交互。用户通过表单提交包含图片文件的数据,服务器端接收这些数据并存储到指定位置。使用`multipart/form-data`编码类型的HTML表单可以支持...
基础的,典型的使用javaweb获取数据库中的信息,使用最基础的jdbc获取相关的数据库信息,附带数据库数据的sql文件和Java连接数据库的驱动mysql-connector-java-5.0.4-bin.jar
SharedObject则提供了客户端数据存储功能,可以用来实现游戏状态的保存。 2. 数据交换:JSON或XML是常用的数据交换格式,它们可以被Flash和JavaWeb轻松解析。当用户在Flash游戏中进行操作时,这些操作数据可以被...