`

Server获取客户端IP 工具类:IPUtil

阅读更多

一 概述

 

    获取客户端Ip工具类,支持client 和 server之间有代理的情况

 

二 代码

 

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

/**
 * 获取client ip
 */
public class IpUtil {

    private static final String[] CONTAINS_IP_HEADERS = {
            "X-Forwarded-For"
            , "Proxy-Client-IP"
            , "WL-Proxy-Client-IP"
            , "HTTP_CLIENT_IP"
            , "HTTP_X_FORWARDED_FOR"
            , "HTTP_X_FORWARDED"
            , "HTTP_X_CLUSTER_CLIENT_IP"
            , "HTTP_FORWARDED_FOR"
            , "HTTP_FORWARDED"
            ,"HTTP_VIA"
            ,"REMOTE_ADDR"};


    /**
     * 获取client ip
     * @param request http 请求
     * @return client ip (ipv4 或ipv6)
     */
    public static String getClientIp(HttpServletRequest request) {

        String clientIp = getIpFromHttpHeader(request);
        if (StringUtils.isNotEmpty(clientIp)) {
            return clientIp;
        }

        return request.getRemoteAddr();
    }

    //从http头获取ip 用于优先支持有proxy的情况
    private static String getIpFromHttpHeader(HttpServletRequest request) {
        for (String header : CONTAINS_IP_HEADERS) {
            String clientIps = request.getHeader(header);

            if (StringUtils.isEmpty(clientIps)) {
                continue;
            }

            if (StringUtils.equalsIgnoreCase("unknown", clientIps)) {
                continue;
            }

            //根据代理协议,取第一为客户端ip
            if (!StringUtils.contains(clientIps, ",")) {
                return clientIps;
            }

            String[] ips = StringUtils.split(clientIps, ',');
            return ips[0];

        }
        return null;
    }

}

 

分享到:
评论

相关推荐

    获取客户端IP地址所需Jar包

    在开发Web服务时,有时我们需要获取调用服务的客户端的IP地址,以便进行日志记录、权限控制或者地理位置分析等操作。"获取客户端IP地址所需Jar包"这个主题,主要涉及的是在使用Apache Axis框架发布Web服务时,如何...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

    SQLServer2008客户端连接工具 sql manager工具

    一款免安装的sqlServer2008的客户端连接小工具,里面有详细的使用说明及汉化说明。和mysql 的 sqlyog一个性质。 注册: 运行registor.reg注册。 汉化:(软件运行保存文件目录不要使用中文目录) 1、运行“Manager....

    JS获取客户端IP地址及MAC地址(转)

    在JavaScript中,获取客户端IP地址和MAC地址是一个相对复杂的过程,因为JavaScript的浏览器安全限制不允许直接访问客户端的MAC地址。然而,我们可以通过一些间接的方法来获取客户端的IP地址。在这个场景下,`...

    方便好用Ms SqlServer客户端管理工具

    标题提到的“方便好用Ms SqlServer客户端管理工具”正是这样一款软件,它具备简洁的界面设计和易于上手的操作流程,使得用户可以轻松地管理和监控多个Ms SqlServer服务器。 首先,让我们关注一下描述中提及的关键...

    zookeeper客户端连接工具: zktools

    zktools是针对ZooKeeper开发的一款客户端连接工具,它使得与ZooKeeper交互变得更加便捷和高效。这款工具通常包含了一些实用的功能,如查看ZNode(ZooKeeper中的数据节点)信息,执行数据操作,监控会话状态,以及...

    OPC-Server模拟器服务端 客户端

    "OPC-Server模拟器服务端" 是一个用于测试和开发的工具,它模拟了一个真实的OPC UA服务器。这种模拟器可以创建虚拟的数据源,生成各种模拟的工业数据,如温度、压力等,以便开发者在没有实际设备的情况下进行应用的...

    VNC SERVER和客户端注册版(压缩包有注册码)

    通常,VNC软件分为两部分:服务器端(VNC Server)和客户端(VNC Viewer)。服务器端安装在需要被控制的计算机上,而客户端则安装在远程操作的设备上。这个压缩包内包含了这两部分,并且已经附带了注册码,意味着...

    61850-server客户端软件

    61850-server客户端软件是一款专为电力系统设计的工具,主要用于实现对IEC 61850标准的遵从和可视化操作。该软件的核心功能是自动连接本地的61850服务器,使用户能够便捷地查看和分析ICD(IED Configuration ...

    IPServer说明书

    4. **端口监听**:IPServer在7070和7071端口分别接收设备注册信息和客户端查询请求,注意防火墙设置,避免阻塞这两个端口。 5. **最大设备数**:IPServer目前支持最多1000个设备注册。 6. **唯一进程**:同一操作...

    精确的在线人数统计,记录客户端的ip等等........

    - **日志分析**:通过解析服务器日志来获取IP和访问信息,例如Apache或Nginx的日志。 - **API接口**:提供给其他服务或前端应用查询在线人数和IP信息的接口。 - **实时处理**:可能使用消息队列(如RabbitMQ、...

    基于MQTT的兼职管理系统 .zip

    client: 客户端相关类 db: 数据管理类 entity: 实体类 server: 服务器相关类 utils: 工具类 快速开始 环境要求 Java 8 或更高版本 IntelliJ IDEA 运行步骤 1. 克隆项目 bash 2. 导入项目 使用...

    ModbusTcp客户端工具

    客户端工具可以获取这些状态,用于监测设备的工作情况。 4. **读输入寄存器**:输入寄存器同样为只读,用于存储设备的不可修改状态,如设备的运行模式等。通过读取这些寄存器,可以了解设备当前的工作状态。 在...

    C_ SQL Server Client客户端源码

    首先,C# SQL Server客户端库通常使用.NET Framework中的System.Data.SqlClient命名空间,该命名空间提供了丰富的类和方法,使得开发者能够与SQL Server进行交互。主要涉及的关键类包括SqlConnection、SqlCommand、...

    Exchange Server 2003 客户端访问指南

    **Exchange Server 2003**是微软在2003年推出的一款企业级电子邮件服务器软件,它不仅提供了邮件收发的基础功能,还集成了日程安排、联系人管理、任务分配、文档共享等一系列协同办公工具,为企业内部沟通和协作提供...

    毕业设计《Python-基于Socket通信PyQt5仿QQ聊天系统》+项目源码+文档说明+演示视频

    common:存放公共的工具类代码文件目录,主要是配置文件解析工具类,数据库操作工具类,本软件主要使用的是sqlalchemy orm数据库框架。 configfile:存放配置文件目录 dto:存放数据库表模型类代码文件 (3)客户端...

    greenplum客户端工具

    《Greenplum客户端工具详解及升级指南》 在大数据处理领域,Greenplum以其高效、扩展性强的特点,成为企业级数据仓库和分析平台的首选。本文将深入探讨Greenplum的客户端工具,以及如何利用提供的升级工具进行系统...

    神州数码客户端IP型

    总的来说,神州数码客户端IP型是企业网络环境中实现高效、安全网络接入的一种工具,通过IP验证机制,确保了网络资源只被授权的设备使用。同时,其提供的配置文件管理和集中化管理功能,使得网络管理变得更加便捷和可...

    服务器客户端通信工具 1.0.zip

    《服务器客户端通信工具1.0.zip》是一款基于.NET框架4.5开发的简易通信软件,专为需要进行服务器与客户端间交互的人群设计。这款工具的出现,旨在简化网络通信中的编程工作,使得开发者能够更加专注于业务逻辑,而...

    pb获取ip地址/mac地址

    对于.NET环境,可以利用NetworkInterface类的GetAllNetworkInterfaces()方法获取所有网络接口,然后遍历这些接口获取IPv4或IPv6的IP地址。 2. **获取MAC地址**: 获取MAC地址通常需要底层的网络操作,PowerBuilder...

Global site tag (gtag.js) - Google Analytics