本文介绍了如何通过反应性伪装客户端使用受基本身份验证保护的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服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:18