gpt4 book ai didi

java - 以 ClientRegistrationId 作为请求属性的 WebClient(使用 OAuth 2.0)

转载 作者:行者123 更新时间:2023-12-05 02:39:00 24 4
gpt4 key购买 nike

我正在寻找一个工作示例,当我将请求属性添加到 WebClient 时,我可以在其中设置 ClientRegistrationId。 spring.io 提供的示例对我不起作用 ( docs.spring.io (5.2.12) )。

当我尝试这个示例时(使用默认的 ClientRegistrationId):

@Bean
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations,
ServerOAuth2AuthorizedClientRepository authorizedClients) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
// (optional) explicitly opt into using the oauth2Login to provide an access token implicitly
// oauth.setDefaultOAuth2AuthorizedClient(true);
// (optional) set a default ClientRegistration.registrationId
oauth.setDefaultClientRegistrationId("MyClRegId");
return WebClient.builder()
.filter(oauth)
.build();
}

调用端点:

ResponseSpec responseSpec = this.webClient.get().uri("/NumberOrders").retrieve();

应用程序属性:

spring.security.oauth2.client.registration.MyClRegId.authorization-grant-type=client_credentials
spring.security.oauth2.client.registration.MyClRegId.client-id=myteam
spring.security.oauth2.client.registration.MyClRegId.client-secret=12349875
spring.security.oauth2.client.provider.MyClRegId.token-uri=https://something/token
spring.security.oauth2.client.registration.MyClRegId.scope=OIDC

我收到以下错误:

引起:java.lang.IllegalArgumentException:serverWebExchange 不能为空

如果我尝试根据 spring.io 示例 ( docs.spring.io (5.2.12) ) 将 ClientRegestrationId 设置为请求属性,则会发生另一个错误(方法 clientRegistrationId(String) 未定义 ...):

ResponseSpec responseSpec = this.webClient
.get()
.attributes(clientRegistrationId("client-id"))
.uri("/NumberOrders")
.retrieve();

这个错误并不奇怪,因为该方法确实不存在,但是有人有这样的方法的例子吗?属性需要 Consumer > attributesConsumer 作为设置 ClientRegistrationId 的输入。当然,它应该可以正常工作而不会出现第一个错误(serverWebExchange 不能为 null)。

我在这里找到了一个有效的设置 WebClient OAuth2 (由 clocken 回答),但 ClientRegistrationId 是在 Bean 中设置的。我想在调用端点时设置它。所以我可以在我的 application.properties 中使用不同的配置(具有不同的 ClientRegistrationIds)。

也许有一种方法可以在设置 WebClient.Builder 时设置 ClientRegistrationId?

我搜索了很多,但找不到任何答案。提前感谢您的帮助。

我正在使用这个依赖项:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

最佳答案

你可以使用

  webClient.get()
.uri("http://localhost:8084/retrieve-resource")
.attributes(
ServerOAuth2AuthorizedClientExchangeFilterFunction
.clientRegistrationId("bael"))
.retrieve()
// ...

完整代码如下: https://www.baeldung.com/spring-webclient-oauth2

关于java - 以 ClientRegistrationId 作为请求属性的 WebClient(使用 OAuth 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69290452/

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