JAVA -获取请求真实IP

1、服务端JAVA获取真实IP

public static String getip(HttpServletRequest request) {
        JSONObject ho = new JSONObject();
        Enumeration e = request.getHeaderNames();
        String remoteIp;
        while (e.hasMoreElements()) {
            remoteIp = (String) e.nextElement();
            ho.put(remoteIp, request.getHeader(remoteIp));
        }
        remoteIp = "";
        remoteIp = request.getHeader("remote_addr");
        logger.debug("Request Header remote_addr 获取IP-{}", remoteIp);
        if (remoteIp == null || remoteIp.isEmpty()) {
            if (ho.get("X-Forwarded-For") == null && ho.get("x-forwarded-for") == null) {
                if (remoteIp == null || remoteIp.isEmpty()) {
                    remoteIp = request.getRemoteAddr();
                    logger.debug("request.getRemoteAddr 获取IP-{}", remoteIp);
                }
            } else {
                String xForwardedFor = ho.containsKey("X-Forwarded-For") ? ho.getString("X-Forwarded-For") : ho.getString("x-forwarded-for");
                if (xForwardedFor != null && !xForwardedFor.isEmpty()) {
                    remoteIp = xForwardedFor.split(",")[0];
                    int len = xForwardedFor.split(",").length;
                    localIp = xForwardedFor.split(",")[len - 1];
                }
                logger.debug("X-Forwarded-For获取IP-{}", remoteIp);
            }
        }
        return remoteIp;
    }

2、如服务端获取IP为服务器IP,可能由于转发过程中丢失真实IP,nginx server配置以下内容:

     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header REMOTE-HOST $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
posted @   高山/景行  阅读(3767)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示