在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.xxx.com/index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/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");
}
可是当我访问http://www.xxx.com/index.jsp/ 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110 了,而我访问http://192.168.1.110:2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off 则:X-Forwarded-For: unknown
于是可得出获得客户端真实IP地址的方法二:
public String getRemoteHost(javax.servlet.http.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.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":ip;
}
以上所述是小编给大家介绍的Java根据Request获取客户端IP,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# request
# 获取客户端ip
# 客户端ip
# Java利用Request请求如何获取IP地址对应的省份、城市详解
# Java利用Request请求获取IP地址的方法详解
# 使用JavaScript获取Request中参数的值方法
# Java中使用HttpRequest获取用户真实IP地址
# Javascript Request获取请求参数如何实现
# 基于request获取访问者真实IP代码示例
# 客户端
# 代理服务器
# 小编
# 都是
# 增加了
# 成了
# 但是在
# 中间层
# 在此
# 给我们
# 当我
# 给大家
# 而我
# 就不能
# 写了
# 当我们
# 所示
# 所述
# 再将
# 给我留言
相关文章:
营销式网站制作方案,销售哪个网站招聘效果最好?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何快速搭建安全的FTP站点?
网站制作公司排行榜,抖音怎样做个人官方网站
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何在万网自助建站平台快速创建网站?
开源网站制作软件,开源网站什么意思?
安徽网站建设与外贸建站服务专业定制方案
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在万网主机上快速搭建网站?
建站之星如何快速更换网站模板?
如何选择高效可靠的多用户建站源码资源?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
兔展官网 在线制作,怎样制作微信请帖?
C++如何编写函数模板?(泛型编程入门)
如何获取开源自助建站系统免费下载链接?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
如何选择CMS系统实现快速建站与SEO优化?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
如何自定义建站之星模板颜色并下载新样式?
如何配置WinSCP新建站点的密钥验证步骤?
5种Android数据存储方式汇总
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
如何在服务器上配置二级域名建站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星安装后界面空白如何解决?
建站之星导航如何优化提升用户体验?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
济南企业网站制作公司,济南社保单位网上缴费步骤?
西安大型网站制作公司,西安招聘网站最好的是哪个?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
,购物网站怎么盈利呢?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何构建满足综合性能需求的优质建站方案?
如何高效配置IIS服务器搭建网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
学校为何禁止电信移动建设网站?
已有域名和空间如何快速搭建网站?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站主机与服务器功能差异如何区分?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
广州美橙建站如何快速搭建多端合一网站?
小型网站制作HTML,*游戏网站怎么搭建?
建站之星后台管理:高效配置与模板优化提升用户体验
Android使用GridView实现日历的简单功能
如何在阿里云完成域名注册与建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。