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;
版权声明:本文为高山景行原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/hogan0210/p/16277570.html