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