Spring Boot 3.1.4中Feign SSL配置下拦截器失效问题求助
问题解决:Spring Boot 3.1.4 + Feign SSL配置下拦截器不生效
问题原因
在Spring Cloud OpenFeign 4.x(适配Spring Boot 3.x)中,直接使用原生Feign.builder()创建全局Feign.Builder Bean时,会绕过Spring Cloud的自动配置逻辑,无法加载@FeignClient指定的configuration类中的自定义拦截器。而Spring Boot 2.7对应的Feign版本中,自动配置会自动合并客户端配置到全局Builder,因此不会出现该问题。
解决方案
方案1:改用Spring Cloud提供的SpringFeign.builder()
将你的Feign.Builder Bean替换为Spring Cloud增强版的Builder,它会自动集成Spring上下文,加载客户端配置:
@Bean public Feign.Builder feignBuilder() { HostnameVerifier hostnameVerifier = (hostname, session) -> true; return SpringFeign.builder() .client(new Client.Default(createSocketFactory(), hostnameVerifier)); }
SpringFeign.builder()会自动识别每个@FeignClient的配置类,将其中的RequestInterceptor注入到对应的Feign客户端中。
方案2:直接定义全局Feign Client Bean(推荐)
如果仅需配置SSL相关的客户端,无需自定义Builder的其他属性,直接定义Client Bean即可,保留默认的SpringFeign自动配置:
@Bean public Client feignClient() { HostnameVerifier hostnameVerifier = (hostname, session) -> true; return new Client.Default(createSocketFactory(), hostnameVerifier); }
这种方式下,Feign的自动配置会使用你定义的SSL Client,同时正常加载每个@FeignClient配置类中的拦截器。
验证
修改后重新启动服务,调用FooFeignClient的接口,即可触发FooConfiguration中定义的拦截器逻辑。
内容的提问来源于stack exchange,提问作者andrei_hryharenka
相关产品推荐
相关产品推荐

