使用Java获取发送请求的电脑的IP地址

时间:2025-04-26 17:55:06

介绍

客户端所有的请求信息都可以通过HttpServletRequest获得,获取客户端ip可以通过getRemoteAddr()获取。

但是如果客户端是通过代理访问我们的服务器,那么getRemoteAddr()获取到的ip就很有可能不是真实的ip,这时候我们可以通过请求头里的x-forwarded-for来获取真实的ip,请求每经一次代理,都会在后面拼接该代理的ip,以逗号分隔。

方法一:此方法获取真实IP(本机IP并不是127.0.0.1)

获取发送请求的电脑的IP地址,并返回

package ;

import ;
import ;

import ;

public class IpUtil {

    /**
     * 获取请求的ip
     */
    public static String getRequestIp() {

        RequestAttributes requestAttributes = ();

        // 从获取RequestAttributes中获取HttpServletRequest的信息
        HttpServletRequest request = (HttpServletRequest) (RequestAttributes.REFERENCE_REQUEST);

        String ip = ("x-forwarded-for");
        if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = ("Proxy-Client-IP");
        }
        if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = ("WL-Proxy-Client-IP");
        }
        if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = ("HTTP_CLIENT_IP");
        }
        if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = ("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || () == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = ();
        }

        return ip;
    }
}

方法二:

RequestAttributes requestAttributes = ();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String clientIP = (request);
// 本地的服务输出 IP:127.0.0.1
("IP:"+ clientIP);