Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何通过被动外国客户机使用基本的受身份验证保护的Restful web服务_Spring Boot_Security_Spring Webflux_Spring Cloud Feign - Fatal编程技术网

Spring boot 如何通过被动外国客户机使用基本的受身份验证保护的Restful web服务

Spring boot 如何通过被动外国客户机使用基本的受身份验证保护的Restful web服务,spring-boot,security,spring-webflux,spring-cloud-feign,Spring Boot,Security,Spring Webflux,Spring Cloud Feign,看起来您正在尝试使用Faign Responsive来实现REST客户端。我还在我的一个项目中使用它,看起来这个库没有现成的方法来指定基本的身份验证凭据。至少没有办法以声明的方式做到这一点。因此,我没有找到比通过@ReactiveFeignClient放弃自动配置并开始手动配置ReactiveFeignClient更好的方法。通过这种方式,您可以手动将授权标头添加到所有传出请求中。因此,如果客户定义如下: @Configuration public class CustomConfigurati

看起来您正在尝试使用Faign Responsive来实现REST客户端。我还在我的一个项目中使用它,看起来这个库没有现成的方法来指定基本的身份验证凭据。至少没有办法以声明的方式做到这一点。因此,我没有找到比通过@ReactiveFeignClient放弃自动配置并开始手动配置ReactiveFeignClient更好的方法。通过这种方式,您可以手动将授权标头添加到所有传出请求中。因此,如果客户定义如下:

@Configuration
public class CustomConfiguration {

    @Bean
    public BasicAuthRequestInterceptor basic() {
        return  new BasicAuthRequestInterceptor("user","user") ;
    }
将以下配置类添加到Spring上下文中,用您自己的数据替换用户名、密码和服务url:

public interface FeingClient {

    @PostMapping("/api/students/special")
    public Flux<Student> getAllStudents(@RequestBody Flux<SubjectStudent> lista);

}

请注意,此API用于手动配置被动外国客户端,在不同版本的被动外国库之间可能会有所不同。还要注意,这种方法有一个主要缺点——如果您开始手动为您的外部客户机创建bean,那么您就失去了外部客户机的主要优势——只需几行代码就可以声明性地编写REST客户机。例如,如果您希望将上述客户端与某种客户端负载平衡机制(如Ribbon/Eureka或Ribbon/Kubernetes)一起使用,您还需要手动配置该机制。

您可以使用直接拦截器:

@配置 类假客户端配置{ @豆子 趣味反应式HttpRequestInterceptor:反应式HttpRequestInterceptor{ 返回ReactiveHttpRequestInterceptor{request:ReactiveHttpRequest-> request.headers[Authorization]=//从SecurityContextHolder插入数据; Mono.justrequest } } }
public interface FeingClient {

    @PostMapping("/api/students/special")
    public Flux<Student> getAllStudents(@RequestBody Flux<SubjectStudent> lista);

}
@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");
    }
}