我正在使用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);
}
}
感谢您的帮助。