选择目标主机后Feign + Ribbon请求拦截
Feign + Ribbon request interception AFTER target host is choosen
我现在在做什么(很简单方便的方式):
Feign.builder()
.client(RibbonClient.create())
...
.requestInterceptor(new MyInterceptor())
但拦截发生在功能区实际解析目标主机之前。
问题是,我要添加的 header 必须根据目标主机的名称创建。
主机解析后,我是否可以操纵 headers?
我找到了针对此问题的以下解决方案。我没有使用 Feign 拦截器,而是使用 RibbonClient 委托:
Feign.builder()
.client(RibbonClient.builder().delegate(new MyDelegate())
...
MyDelegate
扩展 feign.Client.Default
class 并覆盖 public Response execute(Request request, Request.Options options)
方法。
这样我就可以通过URI.create(request.url()).getHost()
访问目标主机了。
然后我创建新的请求,添加我的 header 和 运行 super.execute(newRequest, options)
作为最后一条指令。
我现在在做什么(很简单方便的方式):
Feign.builder()
.client(RibbonClient.create())
...
.requestInterceptor(new MyInterceptor())
但拦截发生在功能区实际解析目标主机之前。 问题是,我要添加的 header 必须根据目标主机的名称创建。
主机解析后,我是否可以操纵 headers?
我找到了针对此问题的以下解决方案。我没有使用 Feign 拦截器,而是使用 RibbonClient 委托:
Feign.builder()
.client(RibbonClient.builder().delegate(new MyDelegate())
...
MyDelegate
扩展 feign.Client.Default
class 并覆盖 public Response execute(Request request, Request.Options options)
方法。
这样我就可以通过URI.create(request.url()).getHost()
访问目标主机了。
然后我创建新的请求,添加我的 header 和 运行 super.execute(newRequest, options)
作为最后一条指令。