首页 > 解决方案 > 如何为特定客户端设置自定义 Feign RequestInterceptor?

问题描述

我需要向一些新的 feign 客户端添加自定义 Authorization 标头。所以我写了一个 RequestInterceptor 并且它有效,但关键是我不希望这个自定义 RequestInterceptor 影响我的老客户。我尝试使用 template.url() 方法进行过滤,但它没有给我请求的整个 url,它只包含客户端方法 url(不是客户端类上方宣布的 url 和路径)。我的问题是如何定位拦截器?

这是我的配置:

@Configuration
open class FeignCustomConfiguration {

    private fun generateToken(): String { ... }

    @Bean
    open fun requestInterceptor(): RequestInterceptor {
        return RequestInterceptor {
            it.header("Authorization", generateToken())
        }
    }
}

标签: spring-bootkotlinfeign

解决方案


我找到了解决方案。对于每个 FeignClient 都有一个configuration接受类数组的选项。在 kotlin 中将类分配给配置的语法如下:

@FeignClient(
        name = "feign-client",
        path = "/path",
        url = "https://example.com",
        configuration = [FeignCustomConfiguration::class]
)
interface FeignCustomClient {
     ...
}

通过这个分配,每个 FeignClient 都有自己的配置,并且 RequestInterceptor 不处理其他客户端。


推荐阅读