我在Spring Boot中有两个Feign客户端在做不同的事情,但希望它们以不同的方式进行身份验证。
@FeignClient(
name = "...",
url = "${url1}",
configuration = Config1.class
)
public interface Client1 {
@PostMapping(
path = "...",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
JsonNode doThing(@RequestBody JsonNode thing);
}
@FeignClient(
name = "...",
url = "${url2}",
configuration = Config2.class
)
public interface Client2 {
@PostMapping(
path = "...",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
JsonNode doThing(@RequestBody JsonNode thing);
}
它们都需要基本的身份验证,但用户名和密码的值不同。为此,我考虑使用单独的Config
类来设置它们各自的客户端:
@Configuration
public class Client1 {
private final String user;
private final String password;
public Client1(final Config1 config) {
this.user = config.getUser();
this.password = config.getPassword();
}
@Bean(name = "client1")
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor(user, password);
}
}
@Configuration
public class Client2 {
private final String user;
private final String password;
public Client1(final Config2 config) {
this.user = config.getUser();
this.password = config.getPassword();
}
@Bean(name = "client2")
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor(user, password);
}
}
但是我的API返回HTTP4xx错误,好像拦截器根本不起作用。我能得到一些关于正确设置的建议吗?
(请注意,我给了这些beanname
s,因为否则它们将与DI冲突。)
我想你必须删除构造型@Configuration
。
事实上,我是在搜索类似问题时来到这里的。我确实有(和你一样)两种不同的配置。一个具有授权的FeignClient和另一个没有授权的客户端。但第二个客户端同时使用两个RequestInterceptor(我实现了一个noop RequestIntercepter,仅用于日志记录)。
你真的能解决你的问题吗?