千家信息网

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

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇"java怎么实现获取客户端ip地址"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
千家信息网最后更新 2024年11月11日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安全错误 数据库的锁怎样保障安全 网络安全与平面设计 河北精英网络技术开发机构 有人串口服务器读取串口数据 天晴网络技术科技有限公司 网络文明网络安全手抄报内容 服务器横装竖装怎么区分 介绍网络安全部门的人 众鼎博锐网络技术有限公司 简述数据库的数据模型与数据操作 大宝剑服务器 吴江电力监控软件开发 中国哲学社会科学期刊全文数据库 金融领域数据库系统 sql数据库语句改变多行 ftp服务器多线程 专科网络技术就业前景 底层网络安全学习路径 分布式数据库统一框架策略研究 有潜力的软件开发培训班 数据库查看密码策略命令 同在互联网科技 人数 中经网软件开发公司 足球经理数据库能力值 数据库技术包含的内容 公安机关网络安全保卫工作 方舟手游服务器状态显示异常 情话软件开发 计算机网络技术常用软件 企业密信怎样填写服务器 南京网络服务器机柜来图加工
0