1
1
package graphql .kickstart .spring .webclient .boot ;
2
2
3
3
import com .fasterxml .jackson .databind .ObjectMapper ;
4
+ import lombok .NonNull ;
4
5
import lombok .RequiredArgsConstructor ;
5
6
import lombok .extern .slf4j .Slf4j ;
6
7
import org .springframework .beans .factory .annotation .Autowired ;
13
14
import org .springframework .context .annotation .Bean ;
14
15
import org .springframework .context .annotation .ComponentScan ;
15
16
import org .springframework .context .annotation .Configuration ;
17
+ import org .springframework .security .oauth2 .client .AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager ;
18
+ import org .springframework .security .oauth2 .client .InMemoryReactiveOAuth2AuthorizedClientService ;
16
19
import org .springframework .security .oauth2 .client .registration .ReactiveClientRegistrationRepository ;
17
20
import org .springframework .security .oauth2 .client .web .reactive .function .client .ServerOAuth2AuthorizedClientExchangeFilterFunction ;
18
- import org .springframework .security .oauth2 .client .web .server .UnAuthenticatedServerOAuth2AuthorizedClientRepository ;
19
21
import org .springframework .web .reactive .function .client .WebClient ;
20
22
21
23
@ Slf4j
22
24
@ Configuration
23
25
@ RequiredArgsConstructor
24
- @ AutoConfigureAfter ({JacksonAutoConfiguration .class , OAuth2ClientAutoConfiguration .class , WebFluxAutoConfiguration .class })
26
+ @ AutoConfigureAfter ({JacksonAutoConfiguration .class , OAuth2ClientAutoConfiguration .class ,
27
+ WebFluxAutoConfiguration .class })
25
28
@ EnableConfigurationProperties (GraphQLClientProperties .class )
26
29
@ ComponentScan (basePackageClasses = GraphQLWebClientImpl .class )
27
30
public class GraphQLWebClientAutoConfiguration {
@@ -36,18 +39,33 @@ public WebClient webClient(
36
39
) {
37
40
clientBuilder .baseUrl (graphqlClientProperties .getUrl ());
38
41
39
- if (clientRegistrations != null && clientRegistrations .findByRegistrationId ("graphql" ).blockOptional ().isPresent ()) {
40
- ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
41
- new ServerOAuth2AuthorizedClientExchangeFilterFunction (
42
- clientRegistrations ,
43
- new UnAuthenticatedServerOAuth2AuthorizedClientRepository ());
44
- oauth .setDefaultClientRegistrationId ("graphql" );
45
- clientBuilder .filter (oauth );
42
+ if (isGraphQLClientRegistrationPresent (clientRegistrations )) {
43
+ clientBuilder .filter (createOAuthFilter (clientRegistrations ));
46
44
}
47
45
48
46
return clientBuilder .build ();
49
47
}
50
48
49
+ @ NonNull
50
+ private ServerOAuth2AuthorizedClientExchangeFilterFunction createOAuthFilter (
51
+ ReactiveClientRegistrationRepository clientRegistrations ) {
52
+ InMemoryReactiveOAuth2AuthorizedClientService clientService =
53
+ new InMemoryReactiveOAuth2AuthorizedClientService (clientRegistrations );
54
+ AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager =
55
+ new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager (clientRegistrations ,
56
+ clientService );
57
+ ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
58
+ new ServerOAuth2AuthorizedClientExchangeFilterFunction (authorizedClientManager );
59
+ oauth .setDefaultClientRegistrationId ("graphql" );
60
+ return oauth ;
61
+ }
62
+
63
+ private boolean isGraphQLClientRegistrationPresent (
64
+ ReactiveClientRegistrationRepository clientRegistrations ) {
65
+ return clientRegistrations != null && clientRegistrations .findByRegistrationId ("graphql" )
66
+ .blockOptional ().isPresent ();
67
+ }
68
+
51
69
@ Bean
52
70
@ ConditionalOnMissingBean
53
71
public ObjectMapper objectMapper () {
0 commit comments