在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实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地址。
于是可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
获得客户端真实IP地址的方法二:
public String getIpAddr(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.getRemoteAddr();
}
return 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, 192.168.1.100
用户真实IP为: 192.168.1.110
分享到:
相关推荐
本文将详细介绍如何通过Java Web应用中的JSP技术获取访问者的实际IP地址。 #### 一、问题背景 当客户端通过HTTP协议请求服务器资源时,服务器能够接收到客户端发送的请求头信息,其中包含了客户端的IP地址。但在...
### JSP中获取浏览者真实IP地址的详细解析 在Web开发中,获取客户端的IP地址是一项基础且重要的功能,特别是在需要追踪用户地理位置、限制访问权限或是进行数据分析时。然而,在复杂的网络环境中,如存在代理服务器...
获取访问者IP地址的技术主要涉及到Servlet或JSP中的HTTP请求对象。在Java Servlet中,我们可以使用`HttpServletRequest`接口的`getRemoteAddr()`方法来获取客户端的IP地址。例如: ```java protected void doGet...
2. **统计分析**:收集访问者IP地址有助于进行流量分析,了解用户的地理位置分布等。 3. **个性化体验**:根据用户的IP地址可以提供更加个性化的服务或内容。 4. **地域限制**:某些网站或服务可能仅限于特定地区的...
在JSP开发中,获取客户端的真实IP地址是一个常见需求,尤其在需要进行安全验证、日志记录或地理位置分析时。在没有反向代理的简单情况下,可以通过request对象的getRemoteAddr()方法来获取客户端IP地址。然而,在...
在Java语言开发的Web应用中,尤其是在使用Java Server Pages(JSP)技术时,获取客户端的IP地址是常见的需求之一,这可以用于日志记录、用户访问统计、安全性检查等多种场景。本文详细介绍了几种在JSP中获取客户端IP...
1. **IP地址获取**:首先,项目需要获取访问者(用户)的IP地址。在Java JSP中,可以通过`request`对象的`getRemoteAddr()`方法来获取客户端的IP地址。这一步是实现IP定制化的关键,因为每个IP地址将对应一张独特的...
5. **地理定位**:通过IP地址识别访问者的地理位置,分析全球用户分布。 ### 四、系统实现技术 1. **Servlet技术**:虽然JSP主要负责视图层,但后台处理逻辑通常由Servlet完成。Servlet处理请求,更新数据库,并将...
这个计数器主要用于跟踪网站或特定页面的访问者数量,通过收集并统计用户IP地址来实现。下面将详细介绍这个主题,包括计数器的工作原理、IP地址的概念、JavaWeb和JSP在其中的作用,以及如何实现这样的功能。 首先,...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
// 获取访问者IP String visitorIP = request.getRemoteAddr(); // 输出访问者IP out.println("访问者的IP地址: " + visitorIP); ``` 需要注意的是,如果应用部署在反向代理服务器(如Nginx或Apache)后面,`...
producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 ...
4. **IP和地理位置信息**:记录访问者的IP地址,并根据IP获取其大概的地理位置信息。 5. **浏览器和设备分析**:统计不同浏览器、操作系统和设备的访问情况,以适应各种用户环境。 6. **异常检测**:监控异常访问...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
内容: 1 转换基本数据类型;运算符;计算阶乘; 2 复数类;java的参数传递;...获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet实现分页查看数据库;
【JSP初学者教程】JavaServer Pages(JSP)是一种基于Java技术的网页程序设计语言,主要用于构建动态网站。JSP旨在简化Web应用的开发,通过将界面设计和业务逻辑分离,让开发者能够更加专注于各自的任务,从而提高...
获取用户的真实IP地址? 58. 获取用户浏览器信息? 59. 获取当前绝对路径? 60. 将HTML文件转换成XML文件? 61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息...
在 JSP 中,可以使用 `request.getRemoteAddr()` 方法获取访问者的 IP 地址。 5. forward 和 redirect forward 和 redirect 是两种不同的页面跳转机制: * forward:在服务器端跳转,客户端不知道跳转的过程 * ...
1. **访问记录**:当用户访问网站时,系统会记录每次请求的详细信息,如IP地址、访问时间、访问页面等。 2. **数据存储**:这些记录的数据会被存储在数据库中,一般使用关系型数据库如MySQL或非关系型数据库如...