解决此问题的一种增强方法是将自定义标头传递给您的请求,例如:
@PostMapping("post-path")
ResponseEntity<Void> postRequest(@RequestHeader(HEADER_CLIENT_NAME) String feignClientName, @RequestBody RequestBody requestBody);
我只想为这个假装客户端在拦截器中设置标题。在设置标头之前,拦截器首先检查 HEADER_CLIENT_NAME 标头是否存在并具有所需的值:
private boolean criteriaMatches(RequestTemplate requestTemplate) {
Map<String, Collection<String>> headers = requestTemplate.headers();
return headers.containsKey(HEADER_CLIENT_NAME)
&& headers.get(HEADER_CLIENT_NAME).contains("feign-client-name");
}
因此,您可以在设置基本身份验证之前进行检查。在拦截器中:
@Override
public void apply(RequestTemplate template) {
if (criteriaMatches(template)) {
/*apply auth header*/
}
}
这样,其他 feign 客户端的请求就不会被这个拦截器操纵了。
最后,我将 feignClientName 设置为请求:
feignClient.postRequest("feign-client-name", postBody);