【发布时间】:2020-08-03 10:00:05
【问题描述】:
我在 Spring Boot API 中使用 Feign,我想使用以下内容对其进行配置:
import feign.RequestInterceptor;
import feign.auth.BasicAuthRequestInterceptor;
import feign.codec.ErrorDecoder;
import feign.okhttp.OkHttpClient;
import org.apache.http.entity.ContentType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignClientConfiguration {
@Bean
public ErrorDecoder errorDecoder() {
return new ErrorDecoder.Default();
}
@Bean
public OkHttpClient client() {
return new OkHttpClient();
}
@Bean
public RequestInterceptor requestInterceptor() {
return requestTemplate -> {
requestTemplate.header("user", "some user");
requestTemplate.header("password", "some password");
requestTemplate.header("Accept", ContentType.APPLICATION_JSON.getMimeType());
};
}
}
问题是,如果我在服务中使用以下代码,我会得到 401,似乎没有提供身份验证数据:
Feign.builder()
.client(new OkHttpClient())
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.logger(new Slf4jLogger(Npa.class))
.target(AClass.class, "https://some.website");
如果我只添加一行指定用户和密码,它就可以工作:
Feign.builder()
.client(new OkHttpClient())
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.logger(new Slf4jLogger(Npa.class))
.requestInterceptor(new BasicAuthRequestInterceptor("some user", "some password"))
.target(AClass.class, "https://some.website");
我更喜欢使用配置,但我不明白其中有什么问题。
【问题讨论】:
标签: java spring-boot feign