Spring Boot中的RestTemplate获取客户端公网ip和局域网ip
时间: 2023-03-04 13:56:12 浏览: 322
在Spring Boot中,可以使用RestTemplate发送HTTP请求并获取响应。要获取客户端的公网IP和局域网IP,可以在RestTemplate中添加拦截器。
首先,创建一个拦截器类来获取IP地址:
```java
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IPInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String remoteAddr = request.getRemoteAddr();
System.out.println("Remote Address : " + remoteAddr);
String forwardedFor = request.getHeader("X-Forwarded-For");
System.out.println("X-Forwarded-For : " + forwardedFor);
return true;
}
}
```
在该类中,我们可以使用HttpServletRequest对象来获取客户端的IP地址。其中`getRemoteAddr()`方法可以获取客户端的公网IP地址,而`X-Forwarded-For`头可以获取客户端的局域网IP地址。
接下来,将该拦截器类添加到Spring Boot应用程序中。我们可以通过创建一个配置类并添加`WebMvcConfigurer`接口的方式实现:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new IPInterceptor());
}
}
```
最后,在RestTemplate中执行HTTP请求时,客户端的公网IP和局域网IP将被打印到控制台中。例如:
```java
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity("https://example.com", String.class);
System.out.println(response.getBody());
```
在控制台中,您将看到类似以下的输出:
```
Remote Address : 123.45.67.89
X-Forwarded-For : 192.168.1.100
```
其中`123.45.67.89`是客户端的公网IP地址,`192.168.1.100`是客户端的局域网IP地址。
阅读全文