18
18
import com .fasterxml .jackson .databind .ObjectMapper ;
19
19
import com .rabbitmq .client .TrustEverythingTrustManager ;
20
20
21
+ import java .util .concurrent .atomic .AtomicReference ;
22
+ import java .util .function .Function ;
21
23
import javax .net .ssl .*;
22
24
import java .io .*;
23
25
import java .net .HttpURLConnection ;
@@ -72,7 +74,7 @@ public class OAuth2ClientCredentialsGrantCredentialsProvider extends RefreshProt
72
74
73
75
private final Map <String , String > parameters ;
74
76
75
- private final ObjectMapper objectMapper = new ObjectMapper ();
77
+ private final AtomicReference < Function < String , Token >> tokenExtractor = new AtomicReference <> ();
76
78
77
79
private final String id ;
78
80
@@ -214,14 +216,8 @@ protected String usernameFromToken(Token token) {
214
216
}
215
217
216
218
protected Token parseToken (String response ) {
217
- try {
218
- Map <?, ?> map = objectMapper .readValue (response , Map .class );
219
- int expiresIn = ((Number ) map .get ("expires_in" )).intValue ();
220
- Instant receivedAt = Instant .now ();
221
- return new Token (map .get ("access_token" ).toString (), expiresIn , receivedAt );
222
- } catch (IOException e ) {
223
- throw new OAuthTokenManagementException ("Error while parsing OAuth 2 token" , e );
224
- }
219
+ return this .tokenExtractor .updateAndGet (current ->
220
+ current == null ? new JacksonTokenLookup () : current ).apply (response );
225
221
}
226
222
227
223
@ Override
@@ -595,4 +591,21 @@ private SSLSocketFactory sslSocketFactory() {
595
591
}
596
592
597
593
}
598
- }
594
+
595
+ private static class JacksonTokenLookup implements Function <String , Token > {
596
+
597
+ private final ObjectMapper objectMapper = new ObjectMapper ();
598
+
599
+ @ Override
600
+ public Token apply (String response ) {
601
+ try {
602
+ Map <?, ?> map = objectMapper .readValue (response , Map .class );
603
+ int expiresIn = ((Number ) map .get ("expires_in" )).intValue ();
604
+ Instant receivedAt = Instant .now ();
605
+ return new Token (map .get ("access_token" ).toString (), expiresIn , receivedAt );
606
+ } catch (IOException e ) {
607
+ throw new OAuthTokenManagementException ("Error while parsing OAuth 2 token" , e );
608
+ }
609
+ }
610
+ }
611
+ }
0 commit comments