本文介绍了如何通过反应性伪装客户端使用受基本身份验证保护的REST风格的Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
@ReactiveFeignClient(name = "service.b",configuration = CustomConfiguration.class)
public interface FeingConfiguration {
@PostMapping("/api/students/special")
public Flux<Student> getAllStudents(@RequestBody Flux<SubjectStudent> lista);
}
帮助,我如何向服务中的标头添加基本身份验证:service.b。我有CustomConfiguration.class类,但它不允许我,我有401个授权失败
@Configuration
public class CustomConfiguration {
@Bean
public BasicAuthRequestInterceptor basic() {
return new BasicAuthRequestInterceptor("user","user") ;
}
推荐答案
看起来您正在尝试使用feign-active(https://github.com/Playtika/feign-reactive)来实现您的REST客户端。我还在我的一个项目中使用它,而且这个库似乎没有现成的方法来指定基本身份验证凭据。至少没有办法以声明的方式做到这一点。因此,我找不到比通过@Reactive FeignClient放弃自动配置,开始手动配置被动伪装客户端更好的方法了。通过这种方式,您可以将&Quot;Authorization&Quot;头手动添加到所有传出请求。因此,提供以下客户端定义:
public interface FeingClient {
@PostMapping("/api/students/special")
public Flux<Student> getAllStudents(@RequestBody Flux<SubjectStudent> lista);
}
将以下配置类添加到您的Spring上下文中,用您自己的数据替换用户名、密码和服务URL:
@Configuration
public class FeignClientConfiguration {
@Bean
FeignClient feignClient() {
WebReactiveFeign
.<FeignClient>builder()
.addRequestInterceptor(request -> {
request.headers().put(
"Authorization",
Collections.singletonList(
"Basic " + Base64.getEncoder().encodeToString(
"username:password".getBytes(StandardCharsets.ISO_8859_1))));
return request;
})
.target(FeignClient.class, "service-url");
}
}
请注意,此用于手动配置反应性伪装客户端的API在不同版本的反应性伪装库之间可能会有所不同。还要注意,这种方法有一个主要的缺点--如果您开始手动为您的feign客户端创建Bean,那么您将失去feign的主要优势,即只需几行代码就可以声明性地编写REST客户端。例如,如果您要将上述客户端与某种客户端负载平衡机制一起使用,如Ribbon/Eureka或Ribbon/Kubernetes,您还需要手动配置。 这篇关于如何通过反应性伪装客户端使用受基本身份验证保护的REST风格的Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!