springboot里面如何获取客户端的公网ip
时间: 2023-02-07 15:05:32 浏览: 264
获取公网IP
在 Spring Boot 中获取客户端的公网 IP 地址,可以使用 HttpServletRequest 的 getRemoteAddr() 方法。
例如,在控制器类中注入 HttpServletRequest 对象,然后调用 getRemoteAddr() 方法即可。
```
@Controller
public class MyController {
@Autowired
private HttpServletRequest request;
@GetMapping("/get-ip")
public String getIp() {
String ip = request.getRemoteAddr();
return "客户端的公网 IP 地址为:" + ip;
}
}
```
注意,如果客户端使用了代理服务器或负载均衡器,则 getRemoteAddr() 方法可能返回代理服务器或负载均衡器的 IP 地址,而不是客户端的真实 IP 地址。
要获取客户端真实的 IP 地址,可以使用以下方法之一:
- 从请求头中获取 IP 地址。例如,可以使用 request.getHeader("X-Forwarded-For") 来获取代理服务器转发的 IP 地址。
- 使用第三方库来解析 IP 地址。例如,可以使用 Apache Commons Net 库的 InetAddressUtils.getLocalHostLANAddress() 方法来获取本地主机的 IP 地址。
示例代码如下:
```
@Controller
public class MyController {
@Autowired
private HttpServletRequest request;
@GetMapping("/get-ip")
public String getIp() {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
阅读全文