SpringCloud 获取Feign请求的真实IP地址
参考: feign 获取请求真实目的ip地址
核心思路: 替换 Feign 的 httpClient
import feign.Client;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignClientConfig {public CachingSpringLoadBalancerFactory cachingLBClientFactory(SpringClientFactory factory) {return new CachingSpringLoadBalancerFactory(factory);}@Beanpublic Client feignClient(SpringClientFactory clientFactory) {CachingSpringLoadBalancerFactory lbClientFactory = cachingLBClientFactory(clientFactory);return new LoadBalancerFeignClient(new InFeignClient(null, null), lbClientFactory, clientFactory);}}
import feign.Client;
import feign.Request;
import feign.Response;
import lombok.extern.slf4j.Slf4j;import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSocketFactory;
import java.io.IOException;@Slf4j
public class InFeignClient extends Client.Default {/***/public InFeignClient(SSLSocketFactory sslContextFactory, HostnameVerifier hostnameVerifier) {super(sslContextFactory, hostnameVerifier);}@Overridepublic Response execute(Request request, Request.Options options) throws IOException {try {
// log.info("feign请求: {}", request.url());return super.execute(request, options);} catch (IOException e) {log.error(" 请求 {} 异常!!", request.url(), e);throw e;}}
}