Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java获取客户端ip地址

作者:让固执流亡丶   发布日期:2025-07-09   浏览:11

import javax.servlet.http.HttpServletRequest;

public class IpUtil {

    /**
     * 获取客户端IP地址
     * @param request HttpServletRequest对象
     * @return 客户端IP地址
     */
    public static String getClientIp(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.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        // 处理多IP的情况(可能有多个代理)
        if (ip != null && ip.indexOf(",") > 0) {
            ip = ip.split(",")[0];
        }
        return ip;
    }
}

解释说明:

  1. 方法签名getClientIp(HttpServletRequest request) 方法接收一个 HttpServletRequest 对象作为参数,返回一个字符串类型的客户端 IP 地址。
  2. 获取 IP 地址的优先级
    • 首先尝试从 x-forwarded-for 请求头中获取 IP 地址,这是最常见的代理服务器传递客户端真实 IP 的方式。
    • 如果 x-forwarded-for 为空或无效,则依次尝试其他常见的 HTTP 请求头,如 Proxy-Client-IPWL-Proxy-Client-IPHTTP_CLIENT_IPHTTP_X_FORWARDED_FOR
    • 如果所有请求头都无效,则直接使用 request.getRemoteAddr() 获取客户端 IP 地址。
  3. 处理多 IP 情况:某些情况下,x-forwarded-for 可能包含多个 IP 地址(例如经过多个代理),此时我们只取第一个 IP 地址作为客户端的真实 IP。

注意事项:

  • 在实际应用中,获取客户端 IP 地址的方式可能会因环境和配置不同而有所差异。例如,在某些复杂的网络环境中,可能需要根据实际情况调整获取 IP 地址的逻辑。

上一篇:java转义

下一篇:java删除文件夹下所有文件

大家都在看

java连接数据库的代码

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java实体类转json字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站