在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;
}
}
相关推荐
JAVA获取客户端MAC,web获取客户端MAC,Applet获取客户端MAC;JAVAweb开发;服务器端很难获取到客户端的MAC受路由器等....获取的到不正确或者被过滤掉;小弟,无奈写了一个客户端的Applet来获取客户端MAC然后再在传...
超全面javaweb教程28天第10天_10_request之获取客户端IP地址、获取请求方式、判断客户端浏览器类型和版本
第一次写的Javaweb程序,程序不多,可是描述却要很多,这就是一件很郁闷的事了
主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下
javaweb客户端脚本程序.doc
javaweb客户端脚本程序.pdf
服务器端(javaWeb)与客户端(android)进行通信,传送json数据, 使用xutls进行网络访问, 注释很详细,教你做后台.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
主要为大家详细介绍了Javaweb获取表单数据的多种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JavaWeb学习是Android客户端目前最全面的免费离线JavaWeb学习书籍,主要内容包括: 1、Html标签、表格、表单等基础内容 2、Javascript基础 3、Javascript脚本高级特效 4、B/S架构工作原理 5、Jsp标签、表达式、...
真实好用的javaweb上使用的googlemap的demo
javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码javaWEB 人力资源管理系统源码...
JavaWeb讲义:JavaWeb应用简介
Java Structs2.1 Spring3.0 Hibernate3.3 CSDN上没看到有人上传过,在别的地方找的,分享一下 part2/4,刚才上传后好像不成功,重新上传一下
基础的,典型的使用javaweb获取数据库中的信息,使用最基础的jdbc获取相关的数据库信息,附带数据库数据的sql文件和Java连接数据库的驱动mysql-connector-java-5.0.4-bin.jar
javaweb
资源包含文件:课程报告word+源码+项目截图 系统环境 Windows10 1903 开发工具 Intellij Idea Ultimate 2019、WebStorm、Chrome jdk版本 12.0.2 详细介绍参考:...
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤JavaWeb-过滤器Filter...
javaweb蛋糕商城项目
javaweb_分页显示数据库内容 javaweb_分页显示数据库内容 javaweb_分页显示数据库内容
JavaWeb课程设计的毕业设计与代码管理系统源码,采用标准MVC模式开发 毕业设计与代码管理系统JavaWeb课程设计的毕业设计与代码管理系统源码,采用标准MVC模式开发 毕业设计与代码管理系统JavaWeb课程设计的毕业设计...