gpt4 book ai didi

spring-boot - 使用 Spring Security OAuth 时 Spring Boot Reactive WebClient "serverWebExchange must be null"

转载 作者:行者123 更新时间:2023-12-01 04:27:42 30 4
gpt4 key购买 nike

我想使用使用 Spring Security OAuth 2 Client Credentials 设置的 Spring Boot WebFlux 应用程序中的 WebClient。

但是,我得到:java.lang.IllegalArgumentException: serverWebExchange must be null
代码在这里:https://github.com/mparaz/spring-apigee-client

当我通过从 pom.xml 中删除 Spring Security 来禁用它时,它工作正常。

当我继续使用 Spring Security,而不是返回 webClient()将结果链接到 Controller ,然后将其打印出来,它也可以工作。

使用 Spring Security 时,响应式(Reactive)客户端和服务器似乎无法一起工作。我怎么能让他们一起跑?

最佳答案

似乎如果您使用 UnAuthenticatedServerOAuth2AuthorizedClientRepository它会将 webExchange 从源请求传播到您的 @RestController。进入WebClient您正在使用调用导致 java.lang.IllegalArgumentException: serverWebExchange must be null 的其他服务

要解决此问题,请使用 ServerOAuth2AuthorizedClientRepository 的 Autowiring 实现。 (这恰好是 AuthenticatedPrincipalServerOAuth2AuthorizedClientRepository )

    @Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder(ReactiveClientRegistrationRepository clientRegistrations,
ObjectMapper objectMapper,
ServerOAuth2AuthorizedClientRepository clientRepository) {

ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2ClientFilter = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrations,
clientRepository);
oauth2ClientFilter.setDefaultClientRegistrationId("apigee");
WebClient.Builder builder = WebClient.builder();
builder.defaultHeader("Content-Type", MediaType.APPLICATION_JSON.toString());
builder.defaultHeader("Accept", MediaType.APPLICATION_JSON.toString());
builder.filter(oauth2ClientFilter);
return builder;
}

关于spring-boot - 使用 Spring Security OAuth 时 Spring Boot Reactive WebClient "serverWebExchange must be null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56973321/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com