Skip to content

IPUtils IP地址处理工具

cn.com.digitalhainan.tools.IPUtils

功能简介

IPUtils 提供客户端 IP 地址获取、本机 IP 获取以及 IP 地理位置解析功能。

核心方法

方法参数返回值说明
getIpAddr(HttpServletRequest request)request: HTTP请求String获取客户端真实IP地址
getLocalIp()String获取服务器本机IP地址
parseIp(String ip)ip: IP地址DescribeIpv4LocationResponse解析IP地理位置(阿里云)

代码示例

获取客户端IP地址

java
import cn.com.digitalhainan.tools.IPUtils;
import jakarta.servlet.http.HttpServletRequest;

@RestController
public class LoginController {
    
    @PostMapping("/login")
    public Result login(@RequestBody LoginDTO dto, HttpServletRequest request) {
        // 获取客户端IP地址
        String clientIp = IPUtils.getIpAddr(request);
        
        // 记录登录日志
        log.info("用户登录,IP:{},用户名:{}", clientIp, dto.getUsername());
        
        // 进行登录验证...
        return Result.success();
    }
}

获取本机IP地址

java
import cn.com.digitalhainan.tools.IPUtils;

// 获取服务器本机IP
String localIp = IPUtils.getLocalIp();
// 结果示例:192.168.1.100

// 用于服务注册、日志记录等场景
@Service
public class ServiceRegister {
    
    @PostConstruct
    public void init() {
        String ip = IPUtils.getLocalIp();
        System.out.println("服务启动,本机IP:" + ip);
    }
}

IP地理位置解析

java
import cn.com.digitalhainan.tools.IPUtils;
import com.aliyuncs.geoip.model.v20200101.DescribeIpv4LocationResponse;
import com.aliyuncs.exceptions.ClientException;

public void parseIpLocation() {
    try {
        String ip = "223.5.5.5";
        DescribeIpv4LocationResponse response = IPUtils.parseIp(ip);
        
        // 获取解析结果
        String country = response.getCountry();      // 国家
        String province = response.getProvince();    // 省份
        String city = response.getCity();            // 城市
        String isp = response.getIsp();              // 运营商
        
        System.out.println("IP归属地:" + country + " " + province + " " + city);
        System.out.println("运营商:" + isp);
        
    } catch (ClientException e) {
        log.error("IP解析失败", e);
    }
}

注意事项

  1. 代理环境getIpAddr 方法会自动处理 X-Forwarded-For、Proxy-Client-IP 等代理头,获取真实客户端IP
  2. 多IP情况:如果 X-Forwarded-For 包含多个IP,取第一个(最原始的客户端IP)
  3. 阿里云依赖parseIp 方法依赖阿里云 GeoIP 服务,需要有效的 AccessKey
  4. 异常处理:IP 解析可能抛出 ClientException,需要进行异常捕获
  5. 隐私合规:IP 地理位置解析涉及用户隐私,使用时需遵守相关法规

Power By 数字海南