springboot获取ip
时间: 2023-10-29 07:54:08 浏览: 171
在Spring Boot中,可以通过HttpServletRequest对象来获取客户端的IP地址。可以使用以下代码获取IP地址:
```java
@RestController
public class MyController {
@Autowired
private HttpServletRequest request;
@GetMapping("/ip")
public String getClientIp() {
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
return ipAddress;
}
}
```
在上述代码中,我们首先尝试从请求头中获取IP地址,如果获取不到再从其他方式获取。其中,`X-Forwarded-For`、`Proxy-Client-IP`、`WL-Proxy-Client-IP`是常见的代理服务器转发的请求头,可以通过它们获取到真实的客户端IP地址。如果无法从请求头中获取到IP地址,则通过`request.getRemoteAddr()`方法获取IP地址。对于本机访问的情况,IP地址为"127.0.0.1"或"0:0:0:0:0:0:0:1",这时候我们可以通过`InetAddress.getLocalHost()`方法获取本机的IP地址。
以上代码将获取到的IP地址作为响应返回,你可以将这个代码片段集成到你的Spring Boot应用程序中,然后访问`/ip`路径来获取客户端的IP地址。
阅读全文