手机版 收藏 导航

在 Spring Boot 应用中获取 IP 地址的方法

原创   www.link114.cn   2024-11-26 20:13:36

在 Spring Boot 应用中获取 IP 地址的方法

可以在 Controller 方法中直接注入 HttpServletRequest 对象,使用 request.getRemoteAddr() 方法获取客户端 IP 地址。例如:

@GetMapping("/getIp")
public String getIp(HttpServletRequest request) {
    String ipAddress = request.getRemoteAddr();
    return "Client IP Address: " + ipAddress;
}

当应用部署在负载均衡器或反向代理服务器后面时,直接使用 request.getRemoteAddr() 方法可能会获取到负载均衡器或反代服务器的 IP,而不是真实的客户端 IP。这种情况下可以使用 X-Forwarded-For 头部信息来获取客户端 IP。例如:

@GetMapping("/getIp")
public String getIp(HttpServletRequest request) {
    String ipAddress = request.getHeader("X-Forwarded-For");
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getRemoteAddr();
    }
    return "Client IP Address: " + ipAddress;
}

除使用 HttpServletRequest 对象,也可以使用 InetAddress 类来获取客户端 IP 地址。例如:

@GetMapping("/getIp")
public String getIp(HttpServletRequest request) {
    String ipAddress = InetAddress.getByName(request.getRemoteAddr()).getHostAddress();
    return "Client IP Address: " + ipAddress;
}