11package graphql .kickstart .spring .webclient .boot ;
22
33import com .fasterxml .jackson .databind .ObjectMapper ;
4+ import lombok .NonNull ;
45import lombok .RequiredArgsConstructor ;
56import lombok .extern .slf4j .Slf4j ;
67import org .springframework .beans .factory .annotation .Autowired ;
1314import org .springframework .context .annotation .Bean ;
1415import org .springframework .context .annotation .ComponentScan ;
1516import org .springframework .context .annotation .Configuration ;
17+ import org .springframework .security .oauth2 .client .AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager ;
18+ import org .springframework .security .oauth2 .client .InMemoryReactiveOAuth2AuthorizedClientService ;
1619import org .springframework .security .oauth2 .client .registration .ReactiveClientRegistrationRepository ;
1720import org .springframework .security .oauth2 .client .web .reactive .function .client .ServerOAuth2AuthorizedClientExchangeFilterFunction ;
18- import org .springframework .security .oauth2 .client .web .server .UnAuthenticatedServerOAuth2AuthorizedClientRepository ;
1921import org .springframework .web .reactive .function .client .WebClient ;
2022
2123@ Slf4j
2224@ Configuration
2325@ RequiredArgsConstructor
24- @ AutoConfigureAfter ({JacksonAutoConfiguration .class , OAuth2ClientAutoConfiguration .class , WebFluxAutoConfiguration .class })
26+ @ AutoConfigureAfter ({JacksonAutoConfiguration .class , OAuth2ClientAutoConfiguration .class ,
27+ WebFluxAutoConfiguration .class })
2528@ EnableConfigurationProperties (GraphQLClientProperties .class )
2629@ ComponentScan (basePackageClasses = GraphQLWebClientImpl .class )
2730public class GraphQLWebClientAutoConfiguration {
@@ -36,18 +39,33 @@ public WebClient webClient(
3639 ) {
3740 clientBuilder .baseUrl (graphqlClientProperties .getUrl ());
3841
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 ));
4644 }
4745
4846 return clientBuilder .build ();
4947 }
5048
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+
5169 @ Bean
5270 @ ConditionalOnMissingBean
5371 public ObjectMapper objectMapper () {
0 commit comments