每个带有Feign requestInterceptor的请求的动态标头?

时间:2018-06-20 15:05:18

标签: java rest netflix-feign feign

我正在使用Feign拨打http。出于安全原因,我需要在每个请求上生成并添加标头。 每个请求的标头值可能不同(例如,它在会话中使用当前连接的用户)。 使用Feign,我们可以定义requestInterceptor来处理标头生成。 但是我的问题是,我在使用FeignBuilder时定义了requestInterceptor。但是在建立我的客户端之后,我无法轻松访问此拦截器(除了在其上保留引用)。 例如:

MyApi api = Feign.builder()
.requestInterceptor(new SecuringRequestInterceptor("some static value"))
.target(MyApi.class, "http://....");

如何向此拦截器添加每个请求特定的值,以使其基于这些值生成某种报头? 我尝试在requestInterceptor实例上保留引用,并创建一种方法来更新其状态。但是我不认为在并发环境中线程安全:

class SecuringRequestInterceptor implements RequestInterceptor {
    private String staticValue;
    private String dynamicValue;
    public SecuringRequestInterceptor(String value) {
        this.staticValue = value;
    }
    public void update(String value) {
        this.dynamicValue = dynamicValue;
    }
    @Override
    public void apply(RequestTemplate template) {
        // use dynamic value here
        template.header("sign", this.staticValue + "_" + this.dynamicValue);
    } 
}

感谢您的帮助。

0 个答案:

没有答案