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