当前位置:首页 > 休闲 > jsp获取客户端ip地址

jsp获取客户端ip地址

2026-10-17 05:44:20 [娱乐] 来源:力不从心网

JSP里获取客户端IP,获户端十有八九你写的取客是 request.getRemoteAddr()。这行代码在本地测试时永远返回127.0.0.1,地址看着挺正常。获户端可一旦部署到生产环境,取客前面挂了Nginx或者Apache代理,地址这方法拿到的获户端就全是代理服务器的IP——清一色的127.0.0.1,或者内网网关地址。取客

我见过不少新手在这上面栽跟头。地址有个同事调了一下午,获户端最后发现所有用户日志里的取客IP都一样,还以为是地址数据库查询写错了。其实问题出在请求链路中间多了层转发。获户端

要拿到真实IP,取客得从HTTP头里找。地址代理服务器一般会把原始IP塞进 X-Forwarded-For 或 X-Real-IP 这两个请求头里。Nginx默认配置 proxy_set_header X-Real-IP $remote_addr;,Apache的mod_proxy也有类似设置。所以代码得改成先看请求头,再看 getRemoteAddr() 兜底。

写个工具方法大概长这样:

public String getClientIp(HttpServletRequest request) {  String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  ip = request.getHeader("X-Forwarded-For"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  ip = request.getRemoteAddr(); } return ip; } 

但这里有个坑——X-Forwarded-For 可能是逗号分隔的一串IP,比如 1.2.3.4, 10.0.0.1。这是因为每经过一层代理,代理服务器会把自己的IP追加到末尾。所以取的时候得拿第一个,那是客户端的真实地址。直接 split(",")[0] 再trim一下。

另一个坑是伪造问题。HTTP头是可以随便改的,用户拿curl直接 -H "X-Forwarded-For: 8.8.8.8" 就能骗过你的代码。如果IP只用来做展示、统计,问题不大。但你要是拿它做登录限制、防刷、风控,那就得小心了。最靠谱的办法是只信任离你最近的那层代理设置的头部,比如Nginx里用 $http_x_real_ip 覆盖掉用户传上来的值,后端再取就安全了。

还有种情况,你用了CDN,比如Cloudflare。它的请求头是 CF-Connecting-IP,得单独适配。不过一般CDN也会回源时把原始IP放进 X-Forwarded-For,所以通用方案通常够用。

再补一句,IPv6环境下 getRemoteAddr() 返回的是像 240e:390:xxxx 这样的长串,存数据库时VARCHAR别只给15位,至少50。我见过有人因为字段长度不够,IPv6地址被截断,查日志时怎么都对不上号。

最后给个建议:别每次请求都现写这堆判断逻辑,封装成一个静态方法放在公共类里,或者写个过滤器统一处理。代码整洁是一方面,更重要的是处理逻辑只维护一份,以后要加新的代理类型,改一处就行。

简单说,JSP取客户端IP的核心就三步:先看代理头,取第一个非unknown的值,最后用 getRemoteAddr() 兜底。至于安全性,那是另一层要考虑的事。

(责任编辑:时尚)

推荐文章
  • wireshark官方网站

    wireshark官方网站 打开Wireshark官网wireshark.org),第一眼看到的不是花哨的动效,而是一张深蓝色的数据包捕获截图。这个界面二十年没大变过,却依然让全球网络工程师心跳加速——毕竟,它是互联网的“显微镜 ...[详细]
  • 百度指数官网

    百度指数官网 百度指数官网的首页,常年挂着一句“基于海量网民行为数据”。这话没毛病,但不够性感。真正让我觉得它厉害的时刻,是某个深夜,我突发奇想,搜了一下“头皮屑”这个词条。你猜怎么着?它的搜索曲线在每年春秋两季都 ...[详细]
  • 酶标flag 抗体

    酶标flag 抗体 实验室里最磨人的不是跑胶,也不是提RNA,而是做酶标板实验时一遍遍洗板。八道排枪戳进板孔,液体滋啦滋啦冲进去又吸出来,像给一群小杯子洗澡。可偏偏这活儿得心细,手一抖,某个孔里液体残留多冲两遍,那个孔 ...[详细]
  • 免费漏洞扫描工具

    免费漏洞扫描工具 半夜两点,我盯着屏幕上那个红得刺眼的漏洞报告,后背发凉。那是一个电商项目的后台登录接口,SQL注入漏洞,危害等级“严重”。修复它只花了我十分钟,但发现它——靠的是一个免费的、连注册都不用的扫描工具。 ...[详细]
  • 想学程序员又是零基础

    想学程序员又是零基础 去年带过一个转行做程序员的学生,三十四岁,之前是卖建材的。他第一次写代码,把分号打成了中文全角,报错信息刷了半屏,他盯着屏幕愣了半天,问我:“这个红字是不是在骂我?”我说不是,它只是告诉你哪儿错了。他 ...[详细]
  • 交管局对外网站

    交管局对外网站 打开交管局对外网站,第一眼看到的不是大红标题,也不是领导致辞,而是满屏的“办事指南”。这其实是件好事,至少对普通人来说,比看新闻要实用得多。但问题在于,那些指南写得像法律条文——每个字都认识,连起来 ...[详细]
  • 虚假贷款诈骗套路

    虚假贷款诈骗套路 凌晨两点,我盯着手机屏幕上那条“您的贷款申请已通过,额度8万元”的短信,差点就点了链接。冷静下来后查了查,发件人是个+86开头的境外号码,网址域名注册才三天。这年头,骗子比银行还勤快。 虚假贷款诈骗的 ...[详细]
  • 聊城吧百度贴吧

    聊城吧百度贴吧 聊城吧百度贴吧,我刷了得有七八年。最早是2016年,刚上大学那会儿,闲着没事就点进去看。那时候首页全是“聊城一中门口又堵了”“开发区哪家烧烤好吃”这种帖子,没什么营养,但就是能让人一直往下翻。 现在的 ...[详细]
  • 王者荣耀辅助卡密购买平台

    王者荣耀辅助卡密购买平台 《王者荣耀辅助卡密购买平台》 半夜两点,游戏群里有人甩出一条链接,配文“懂的都懂”。点进去,页面简陋得像十年前的论坛,背景是暗紫色渐变,中央一行大字“王牌辅助,稳定不封”,下面就是输入卡密激活的框。这 ...[详细]
  • 攻防渗透平台

    攻防渗透平台 凌晨两点,某金融公司机房的空调嗡嗡作响。安全工程师老周盯着屏幕,指尖在键盘上敲下一行命令。三分钟后,他拿到了那台核心数据库服务器的root权限——不是通过什么高深莫测的零日漏洞,只是利用了运维人员贴在 ...[详细]
热点阅读