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

java 获取请求方ip

作者:术之影   发布日期:2025-03-21   浏览:120

import javax.servlet.http.HttpServletRequest;

public class IpUtil {

    /**
     * 获取请求方的IP地址
     * @param request HTTP请求对象
     * @return 请求方的IP地址
     */
    public static String getIpAddr(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();
        }
        // 如果是多级代理,则取第一个非unknown的IP地址
        if (ip != null && ip.contains(",")) {
            String[] ips = ip.split(",");
            for (String str : ips) {
                if (!"unknown".equalsIgnoreCase(str)) {
                    ip = str;
                    break;
                }
            }
        }
        return ip;
    }
}

解释说明:

  1. 方法定义getIpAddr 方法接收一个 HttpServletRequest 对象作为参数,用于获取客户端的 IP 地址。
  2. 检查多个头信息:通过检查多个可能包含客户端 IP 地址的 HTTP 头信息(如 x-forwarded-for, Proxy-Client-IP, WL-Proxy-Client-IP, HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR),以确保即使在经过代理服务器的情况下也能正确获取真实的客户端 IP 地址。
  3. 处理未知值:如果某个头信息的值为 null 或者是 "unknown",则继续检查下一个头信息。
  4. 多级代理处理:如果 x-forwarded-for 头信息中包含多个 IP 地址(即多级代理的情况),则取第一个非 "unknown" 的 IP 地址。
  5. 返回结果:最终返回客户端的 IP 地址。

上一篇:java rsa解密

下一篇:this在java中的作用

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

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

Laravel 中文站