11/*
2- * Copyright 2020-2024 the original author or authors.
2+ * Copyright 2020-2025 the original author or authors.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1515 */
1616package sample .config ;
1717
18- import java .util .Arrays ;
1918import java .util .function .Supplier ;
2019
2120import javax .net .ssl .KeyManagerFactory ;
3029import org .springframework .beans .factory .annotation .Qualifier ;
3130import org .springframework .boot .ssl .SslBundle ;
3231import org .springframework .boot .ssl .SslBundles ;
33- import org .springframework .boot .web .client .RestTemplateBuilder ;
3432import org .springframework .context .annotation .Bean ;
3533import org .springframework .context .annotation .Configuration ;
3634import org .springframework .http .client .ClientHttpRequestFactory ;
4038import org .springframework .security .oauth2 .client .OAuth2AuthorizedClientManager ;
4139import org .springframework .security .oauth2 .client .OAuth2AuthorizedClientProvider ;
4240import org .springframework .security .oauth2 .client .OAuth2AuthorizedClientProviderBuilder ;
43- import org .springframework .security .oauth2 .client .endpoint .DefaultClientCredentialsTokenResponseClient ;
4441import org .springframework .security .oauth2 .client .endpoint .OAuth2AccessTokenResponseClient ;
4542import org .springframework .security .oauth2 .client .endpoint .OAuth2ClientCredentialsGrantRequest ;
46- import org .springframework .security .oauth2 .client .endpoint .OAuth2ClientCredentialsGrantRequestEntityConverter ;
43+ import org .springframework .security .oauth2 .client .endpoint .RestClientClientCredentialsTokenResponseClient ;
4744import org .springframework .security .oauth2 .client .http .OAuth2ErrorResponseErrorHandler ;
4845import org .springframework .security .oauth2 .client .registration .ClientRegistrationRepository ;
4946import org .springframework .security .oauth2 .client .web .DefaultOAuth2AuthorizedClientManager ;
5350import org .springframework .security .oauth2 .core .http .converter .OAuth2AccessTokenResponseHttpMessageConverter ;
5451import org .springframework .util .LinkedMultiValueMap ;
5552import org .springframework .util .MultiValueMap ;
56- import org .springframework .web .client .RestTemplate ;
53+ import org .springframework .web .client .RestClient ;
5754import org .springframework .web .reactive .function .client .WebClient ;
5855
5956/**
@@ -83,17 +80,18 @@ public WebClient defaultClientWebClient(
8380 public WebClient selfSignedDemoClientWebClient (
8481 ClientRegistrationRepository clientRegistrationRepository ,
8582 OAuth2AuthorizedClientRepository authorizedClientRepository ,
86- RestTemplateBuilder restTemplateBuilder ,
8783 @ Qualifier ("self-signed-demo-client-http-request-factory" ) Supplier <ClientHttpRequestFactory > clientHttpRequestFactory ,
8884 SslBundles sslBundles ) throws Exception {
8985
9086 // @formatter:off
91- RestTemplate restTemplate = restTemplateBuilder
92- .requestFactory (clientHttpRequestFactory )
93- .messageConverters (Arrays .asList (
94- new FormHttpMessageConverter (),
95- new OAuth2AccessTokenResponseHttpMessageConverter ()))
96- .errorHandler (new OAuth2ErrorResponseErrorHandler ())
87+ RestClient restClient = RestClient .builder ()
88+ .requestFactory (clientHttpRequestFactory .get ())
89+ .messageConverters ((messageConverters ) -> {
90+ messageConverters .clear ();
91+ messageConverters .add (new FormHttpMessageConverter ());
92+ messageConverters .add (new OAuth2AccessTokenResponseHttpMessageConverter ());
93+ })
94+ .defaultStatusHandler (new OAuth2ErrorResponseErrorHandler ())
9795 .build ();
9896 // @formatter:on
9997
@@ -102,7 +100,7 @@ public WebClient selfSignedDemoClientWebClient(
102100 OAuth2AuthorizedClientProviderBuilder .builder ()
103101 .clientCredentials (clientCredentials ->
104102 clientCredentials .accessTokenResponseClient (
105- createClientCredentialsTokenResponseClient (restTemplate )))
103+ createClientCredentialsTokenResponseClient (restClient )))
106104 .build ();
107105 // @formatter:on
108106
@@ -124,16 +122,17 @@ public WebClient selfSignedDemoClientWebClient(
124122 public OAuth2AuthorizedClientManager authorizedClientManager (
125123 ClientRegistrationRepository clientRegistrationRepository ,
126124 OAuth2AuthorizedClientRepository authorizedClientRepository ,
127- RestTemplateBuilder restTemplateBuilder ,
128125 @ Qualifier ("default-client-http-request-factory" ) Supplier <ClientHttpRequestFactory > clientHttpRequestFactory ) {
129126
130127 // @formatter:off
131- RestTemplate restTemplate = restTemplateBuilder
132- .requestFactory (clientHttpRequestFactory )
133- .messageConverters (Arrays .asList (
134- new FormHttpMessageConverter (),
135- new OAuth2AccessTokenResponseHttpMessageConverter ()))
136- .errorHandler (new OAuth2ErrorResponseErrorHandler ())
128+ RestClient restClient = RestClient .builder ()
129+ .requestFactory (clientHttpRequestFactory .get ())
130+ .messageConverters ((messageConverters ) -> {
131+ messageConverters .clear ();
132+ messageConverters .add (new FormHttpMessageConverter ());
133+ messageConverters .add (new OAuth2AccessTokenResponseHttpMessageConverter ());
134+ })
135+ .defaultStatusHandler (new OAuth2ErrorResponseErrorHandler ())
137136 .build ();
138137 // @formatter:on
139138
@@ -144,7 +143,7 @@ public OAuth2AuthorizedClientManager authorizedClientManager(
144143 .refreshToken ()
145144 .clientCredentials (clientCredentials ->
146145 clientCredentials .accessTokenResponseClient (
147- createClientCredentialsTokenResponseClient (restTemplate )))
146+ createClientCredentialsTokenResponseClient (restClient )))
148147 .provider (new DeviceCodeOAuth2AuthorizedClientProvider ())
149148 .build ();
150149 // @formatter:on
@@ -177,20 +176,16 @@ private static ClientHttpConnector createClientConnector(SslBundle sslBundle) th
177176 }
178177
179178 private static OAuth2AccessTokenResponseClient <OAuth2ClientCredentialsGrantRequest > createClientCredentialsTokenResponseClient (
180- RestTemplate restTemplate ) {
181- DefaultClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient =
182- new DefaultClientCredentialsTokenResponseClient ();
183- clientCredentialsTokenResponseClient .setRestOperations (restTemplate );
184-
185- OAuth2ClientCredentialsGrantRequestEntityConverter clientCredentialsGrantRequestEntityConverter =
186- new OAuth2ClientCredentialsGrantRequestEntityConverter ();
187- clientCredentialsGrantRequestEntityConverter .addParametersConverter (authorizationGrantRequest -> {
179+ RestClient restClient ) {
180+ RestClientClientCredentialsTokenResponseClient clientCredentialsTokenResponseClient =
181+ new RestClientClientCredentialsTokenResponseClient ();
182+ clientCredentialsTokenResponseClient .addParametersConverter (authorizationGrantRequest -> {
188183 MultiValueMap <String , String > parameters = new LinkedMultiValueMap <>();
189184 // client_id parameter is required for tls_client_auth method
190185 parameters .add (OAuth2ParameterNames .CLIENT_ID , authorizationGrantRequest .getClientRegistration ().getClientId ());
191186 return parameters ;
192187 });
193- clientCredentialsTokenResponseClient .setRequestEntityConverter ( clientCredentialsGrantRequestEntityConverter );
188+ clientCredentialsTokenResponseClient .setRestClient ( restClient );
194189
195190 return clientCredentialsTokenResponseClient ;
196191 }
0 commit comments