import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletRequest;

public class IpUtil {

    public static String getIP(final HttpServletRequest req) throws Exception {
        if (req == null) {
            throw (new Exception("getIpAddr method HttpServletRequest Object is null"));
        }
        String ipStr = req.getHeader("x-forwarded-for");
        if (StringUtils.isEmpty(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
            ipStr = req.getHeader("Proxy-Client-IP");
        }
        if (StringUtils.isEmpty(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
            ipStr = req.getHeader("WL-Proxy-Client-IP");
        }
        if (StringUtils.isEmpty(ipStr) || "unknown".equalsIgnoreCase(ipStr)) {
            ipStr = req.getRemoteAddr();
        }

        // 多个路由时,取第一个非unknown的ip
        final String[] arr = ipStr.split(",");
        for (final String str : arr) {
            if (!"unknown".equalsIgnoreCase(str)) {
                ipStr = str;
                break;
            }
        }
        // 目的是将localhost访问对应的ip 0:0:0:0:0:0:0:1 转换成 127.0.0.1
        return ipStr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipStr;
    }
}
最后修改:2023 年 07 月 21 日
如果觉得我的文章对你有用,请随意赞赏