package com.usky.system.service.util;

import javax.servlet.http.HttpServletRequest;
public class IpUtils {
    /**
     * 获取客户端真实IP（适配代理/非代理场景）
     */
    public static String getClientIp(HttpServletRequest request) {
        // 1. 先从代理头获取（Nginx/网关转发时会填充）
        String ip = request.getHeader("X-Forwarded-For");
        // 2. 若无X-Forwarded-For，取X-Real-IP（Nginx常用）
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        // 3. 若无反向代理，取原生的REMOTE_ADDR（TCP连接的源IP）
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        // 4. 处理X-Forwarded-For多IP场景（格式：客户端IP, 代理1IP, 代理2IP）
        if (ip != null && ip.contains(",")) {
            ip = ip.split(",")[0].trim(); // 取第一个IP（客户端真实IP）
        }
        // 5. 本地测试时的IP处理（127.0.0.1/0:0:0:0:0:0:0:1）
        if ("0:0:0:0:0:0:0:1".equals(ip)) {
            ip = "127.0.0.1";
        }
        return ip;
    }
}
