千家信息网

java怎么实现获取客户端ip地址

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇"java怎么实现获取客户端ip地址"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
千家信息网最后更新 2025年11月16日java怎么实现获取客户端ip地址

这篇"java怎么实现获取客户端ip地址"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"java怎么实现获取客户端ip地址"文章吧。

一、前言

环境:jdk1.8 + idea2019.3 + Windows10

二、摘要

项目开发中,在日常处理操作日志时,基本都会通过aop切面来实现用户操作日志的记录,但涉及到记录操作日志,想必肯定会有一项是基本都会参考记录的,那就是操作人的客户端ip地址,日后查"脏"也方便。

那么问题来了。具体怎么获取客户端的ip地址啊?哈哈哈,这就是我这期的教学内容,若是有的小伙伴知道怎么获取,那么我要表扬你,但是实现思路是否与我有同异?所以你也可以尝试看下bug菌是如何实现的吧。

接下来,我就开始教学啦,你们可得用心听。

三、java实现获取客户端ip

第一步:我们先来定义一个工具类,专门用于封装ip相关的方法类。

package com.example.review.util; import org.apache.commons.lang3.StringUtils;import javax.servlet.http.HttpServletRequest; /** * ip相关工具类 * * @Author luoYong             * @Date 2022-03-30 17:16         */public class IpUtils {  }

第二步:也就是此期教学的核心所在了,那究竟怎么获取客户端ip呢?我也就不卖关子了。

通常获取客户端的IP地址都是通过 request.getRemoteAddr() ,对吧,但是你有想过么,如今基本系统都会进行域名代理等,比如通过 Apache,Squid 等反向代理软件,使用getRemoteAddr() 根本无法再获取到客户端的真实 IP 地址了。

为什么加了代理就获取不到了呢?这是因为在客户端和服务之间增加了中间代理,因此服务器是无法直接拿到客户端的 IP地址,服务器端应用也无法直接通过转发请求的地址返回给客户端,基本这种获取方式就直接被pass掉了。

如果还不理解,可以看下下边的代理流程示意图,你就会理解啦。

如果只局限系统不做代理,那肯定是ok的。那系统基本不可能不做代理的呀,所以咋办?别着急,我会告诉你怎么玩儿,如果使用了我的教学方法还获取不到,请你来揍我,好吧?

如下是具体获取客户端ip方法类:仅供大家参考。

    /***     * 获取客户端ip地址     * @param request     */    public static String getIP(final HttpServletRequest request) throws Exception {        if (request == null) {            throw (new Exception("getIpAddr method HttpServletRequest Object is null"));        }        String ipStr = request.getHeader("x-forwarded-for");        if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {            ipStr = request.getHeader("Proxy-Client-IP");        }        if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {            ipStr = request.getHeader("WL-Proxy-Client-IP");        }        if (StringUtils.isBlank(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {            ipStr = request.getRemoteAddr();        }         // 多个路由时,取第一个非unknown的ip        final String[] arr = ipStr.split(",");        for (final String str : arr) {            if (!"unknown".equalsIgnoreCase(str)) {                ipStr = str;                break;            }        }        //目的是将localhost访问对应的ip 0:0:0:0:0:0:0:1 转成 127.0.0.1。        return ipStr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipStr;    }

需要注意的是,自己本地开发,基本都是通过使用 [ localhost ]标准主机名来进行接口访问的,对吧,那么你就会特别好奇,数据库记录日志 ip 这一栏,ip有的竟然是 0:0:0:0:0:0:0:1。

为什么获取到的ip是这样呢?这是因为 0:0:0:0:0:0:0:1 是[ ipv6 ]的表现形式,对应[ ipv4 ]来说相当于127.0.0.1,也就是本机。所以我在最后通过三目运算强行把ipv6地址转成了ipv4地址。这样讲大家可否能理解?不理解就回头好好恶补一下计算机网络,这也不是不可以。

如下分别是通过 localhost 及实际ip分别进行接口访问,数据库保存的操作日志记录。

附上获取本地ip数据库截图:

以上就是关于"java怎么实现获取客户端ip地址"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

客户 地址 客户端 代理 内容 日志 教学 端的 就是 数据 数据库 方法 系统 服务 也就是 工具 接口 文章 服务器 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 浙江省网络安全考研 Tp软件开发工程师工资 数据库关联关系变 数据库,同一字段的值分开 谭八爷软件开发 短信猫群发软件开发 电脑服务器未响应 ecshop数据库修改 铁路局网络安全培训考试 国产串口终端服务器价格 广州市中智软件开发有限公司怎么样 数据库安全配置核查表 数据库技术与应用慕课 先装数据库还是先装iis 重庆it服务器解决方案 超毅世纪网络技术股份有限公司 软件开发工程师难考吗 河北数据网络技术资费 服务器高级工作台怎么合成 独立服务器怎么查看 消费者与mq服务器断开连接 虚谷数据库设置用户查询空间 网络安全主题书法硬笔 南京市白鸥网络技术有限公司 设计银行系统客户服务数据库 逆向建模软件开发 联想服务器raid配置界面 经常投诉的顾客要不要建立数据库 松下电器软件开发大连怎么样 数据库设计基础数据字典
0