JAVA获取客户端真实IP地址经典写法与Lambda写法对比

一、经典写法

java 复制代码
    @Autowired
    HttpServletRequest request;
    
    String[] IP_HEADERS = {"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED", "HTTP_X_CLUSTER_CLIENT_IP", "HTTP_CLIENT_IP", "HTTP_FORWARDED_FOR", "HTTP_FORWARDED", "HTTP_VIA", "REMOTE_ADDR"};
  
    private String getClientIpClassic()
    {
        log.info("##### Classic");
        for (String header : IP_HEADERS)
        {
            String ip = request.getHeader(header);
            if (StringUtils.isNotBlank(ip) && !StringUtils.equalsIgnoreCase("unknown", ip))
            {
                log.info("##### ip header: {}", header);
                String[] ips = ip.split(",");
                return ips[0].trim();
            }
        }
        log.info("##### request.getRemoteAddr");
        return request.getRemoteAddr();
    }

一、Lambda写法

java 复制代码
    private String getClientIpLambda()
    {
        log.info("##### Lambda");
        return Arrays.stream(IP_HEADERS)
            .peek(log::info)
            .map(request::getHeader)
            .filter(ips -> StringUtils.isNotBlank(ips) && !"unknown".equalsIgnoreCase(ips))
            .flatMap(ips -> Arrays.stream(ips.split(",")))
            .filter(StringUtils::isNotBlank)
            .map(String::trim)
            .findFirst()
            .orElse(request.getRemoteAddr());
    }
相关推荐
做个文艺程序员2 小时前
Spring AI + Qwen3.5 实现多步 Agent:从工具调用到自主任务拆解的踩坑全记录
java·人工智能·spring
gentle_ice2 小时前
初入社会的我该何去何从
java
Kiling_07042 小时前
Java多态、final与抽象类:面向对象编程进阶指南
java·开发语言
better_liang3 小时前
每日Java面试场景题知识点之-MySQL索引
java·数据库·mysql·性能优化·索引
Aktx20FNz3 小时前
一文学习 Spring AOP 源码全过程
java·学习·spring
Nyarlathotep01133 小时前
ThreadLocal
java·后端
菜鸟小九4 小时前
JUC(入门1-3章)
java·juc
LJianK14 小时前
Java中的类、普通类,抽象类,接口的区别
java·开发语言
LiLiYuan.4 小时前
【Java线程 vs 虚拟机线程】
java·开发语言