Skip to content

Commit 48269ae

Browse files
committed
make WebClient.Builder configurable in SpringReactiveOpaqueTokenIntrospector (#17194)
Signed-off-by: Andrey Litvitski <[email protected]>
1 parent 5517d8f commit 48269ae

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

oauth2/oauth2-resource-server/src/main/java/org/springframework/security/oauth2/server/resource/introspection/SpringReactiveOpaqueTokenIntrospector.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ default List<String> getScopes() {
268268
* Used to build {@link SpringReactiveOpaqueTokenIntrospector}.
269269
*
270270
* @author Ngoc Nhan
271+
* @author Andrey Litvitski
271272
* @since 6.5
272273
*/
273274
public static final class Builder {
@@ -278,6 +279,8 @@ public static final class Builder {
278279

279280
private String clientSecret;
280281

282+
private WebClient.Builder webClientBuilder;
283+
281284
private Builder(String introspectionUri) {
282285
this.introspectionUri = introspectionUri;
283286
}
@@ -308,13 +311,31 @@ public Builder clientSecret(String clientSecret) {
308311
return this;
309312
}
310313

314+
/**
315+
* The builder will use the provided {@link WebClient.Builder} to build the
316+
* {@link WebClient} used for token introspection requests. If not provided, a
317+
* default builder will be used.
318+
* @param webClientBuilder The {@link WebClient.Builder} to customize the HTTP
319+
* client
320+
* @return the {@link SpringReactiveOpaqueTokenIntrospector.Builder}
321+
* @since 6.5
322+
*/
323+
public Builder webClientBuilder(WebClient.Builder webClientBuilder) {
324+
Assert.notNull(webClientBuilder, "webClientBuilder cannot be null");
325+
this.webClientBuilder = webClientBuilder;
326+
return this;
327+
}
328+
311329
/**
312330
* Creates a {@code SpringReactiveOpaqueTokenIntrospector}
313331
* @return the {@link SpringReactiveOpaqueTokenIntrospector}
314332
* @since 6.5
315333
*/
316334
public SpringReactiveOpaqueTokenIntrospector build() {
317-
WebClient webClient = WebClient.builder()
335+
if (this.webClientBuilder == null) {
336+
this.webClientBuilder = WebClient.builder();
337+
}
338+
WebClient webClient = this.webClientBuilder
318339
.defaultHeaders((h) -> h.setBasicAuth(this.clientId, this.clientSecret))
319340
.build();
320341
return new SpringReactiveOpaqueTokenIntrospector(this.introspectionUri, webClient);

oauth2/oauth2-resource-server/src/test/java/org/springframework/security/oauth2/server/resource/introspection/SpringReactiveOpaqueTokenIntrospectorTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ public void introspectWithEncodeClientCredentialsThenOk() throws Exception {
297297
.withIntrospectionUri(introspectUri)
298298
.clientId("client&1")
299299
.clientSecret("secret@$2")
300+
.webClientBuilder(WebClient.builder())
300301
.build();
301302
OAuth2AuthenticatedPrincipal authority = introspectionClient.introspect("token").block();
302303
// @formatter:off

0 commit comments

Comments
 (0)