云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

SpringCloud中FeignInterceptor用于拦截方法调用服务

jxf315 2025-09-11 21:31:52 教程文章 3 ℃

一,Feign

Feign是springcloud中远程调用的一种形式,其实底层也就是http的形式调用的,要想利用Feign写一个拦截器,可以做一些特殊的处理,比如可以想nginx一样,指定访问的路径服务的转发,也可以做一些请求头等一些处理

二,FeignInterceptor处理服务转发

FeignServiceUrlConfig

@Configuration
@RefreshScope
@ConfigurationProperties("feign.service")
public class FeignServiceUrlConfig {
    /**
     * key为服务名,value为接口对应的方法名+地址
     */
    private Map<String, Map<String, String>> url;

    public Map<String, Map<String, String>> getUrl() {
        return url;
    }

    public void setUrl(Map<String, Map<String, String>> url) {
        this.url = url;
    }

}

FeignInterceptor

@Configuration
public class FeignInterceptor implements RequestInterceptor {
    @Autowired
    private FeignServiceUrlConfig feignServiceUrlConfig;

    @Override
    public void apply(RequestTemplate template) {
        String methodName = template.methodMetadata().method().getName();
        Target<?> target = template.feignTarget();
        Map<String, Map<String, String>> urlMap = feignServiceUrlConfig.getUrl();
        if (MapUtils.isNotEmpty(urlMap) && urlMap.containsKey(target.name()) && MapUtils.isNotEmpty(urlMap.get(target.name())) && urlMap.get(target.name()).containsKey(methodName)) {
            template.target(urlMap.get(target.name()).get(methodName));
        }
    }
}

三,配置文件中配置

feign:
  service:
    url:
       file-service: {"upload":"http://127.0.0.1:9204"}
最近发表
标签列表