From 3e68e5b7f0e1ae676055914e04a71615fff89249 Mon Sep 17 00:00:00 2001 From: gabriel-farache Date: Thu, 19 Jun 2025 11:49:58 +0200 Subject: [PATCH 1/2] Fix #1210 - use put method to set headers in oauth2 delegate to avoid immutable error Signed-off-by: gabriel-farache --- .../oidc/ClassicOidcClientRequestFilterDelegate.java | 3 ++- .../oidc/ReactiveOidcClientRequestFilterDelegate.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java index 677ee5b48..ecae242d0 100644 --- a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ClassicOidcClientRequestFilterDelegate.java @@ -1,6 +1,7 @@ package io.quarkiverse.openapi.generator.oidc; import java.io.IOException; +import java.util.Collections; import jakarta.annotation.Priority; import jakarta.enterprise.inject.spi.InjectionPoint; @@ -42,7 +43,7 @@ protected java.util.Optional clientId() { public void filter(ClientRequestContext requestContext) throws IOException { try { String accessToken = this.getAccessToken(); - requestContext.getHeaders().add(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + requestContext.getHeaders().put(HttpHeaders.AUTHORIZATION, Collections.singletonList("Bearer " + accessToken)); } catch (DisabledOidcClientException ex) { LOG.debug("Client is disabled, acquiring and propagating the token is not necessary"); } catch (RuntimeException ex) { diff --git a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java index cdbd57961..2cd359c3e 100644 --- a/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java +++ b/client/oidc/src/main/java/io/quarkiverse/openapi/generator/oidc/ReactiveOidcClientRequestFilterDelegate.java @@ -1,6 +1,7 @@ package io.quarkiverse.openapi.generator.oidc; import java.io.IOException; +import java.util.Collections; import jakarta.annotation.Priority; import jakarta.enterprise.inject.spi.InjectionPoint; @@ -57,8 +58,8 @@ public void filter(ResteasyReactiveClientRequestContext requestContext) { requestContext.suspend(); super.getTokens().subscribe().with(tokens -> { - requestContext.getHeaders().putSingle(HttpHeaders.AUTHORIZATION, - BEARER_SCHEME_WITH_SPACE + tokens.getAccessToken()); + requestContext.getHeaders().put(HttpHeaders.AUTHORIZATION, + Collections.singletonList(BEARER_SCHEME_WITH_SPACE + tokens.getAccessToken())); requestContext.resume(); }, t -> { if (t instanceof DisabledOidcClientException) { From 7ccddf98333d9cac8b3d542e2a163959ee9f348b Mon Sep 17 00:00:00 2001 From: gabriel-farache Date: Thu, 19 Jun 2025 15:28:40 +0200 Subject: [PATCH 2/2] Add unit test Signed-off-by: gabriel-farache --- .../generator/oidc/OAuth2AuthenticationProviderTest.java | 2 ++ .../oidc/ReactiveOAuth2AuthenticationProviderTest.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/OAuth2AuthenticationProviderTest.java b/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/OAuth2AuthenticationProviderTest.java index aa54b54b7..5c118378d 100644 --- a/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/OAuth2AuthenticationProviderTest.java +++ b/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/OAuth2AuthenticationProviderTest.java @@ -4,6 +4,7 @@ import static org.mockito.Mockito.when; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -57,6 +58,7 @@ public class OAuth2AuthenticationProviderTest { @BeforeEach void setUp() { headers = new MultivaluedHashMap<>(); + headers.put(HttpHeaders.AUTHORIZATION, Collections.singletonList("TEST")); Mockito.lenient().doReturn(headers).when(requestContext).getHeaders(); classicDelegate = Mockito.mock(ClassicOidcClientRequestFilterDelegate.class); diff --git a/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/ReactiveOAuth2AuthenticationProviderTest.java b/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/ReactiveOAuth2AuthenticationProviderTest.java index a450f3cb2..9e81dc9b4 100644 --- a/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/ReactiveOAuth2AuthenticationProviderTest.java +++ b/client/oidc/src/test/java/io/quarkiverse/openapi/generator/oidc/ReactiveOAuth2AuthenticationProviderTest.java @@ -4,6 +4,7 @@ import static org.mockito.Mockito.when; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -61,6 +62,7 @@ public class ReactiveOAuth2AuthenticationProviderTest { @BeforeEach void setUp() { headers = new MultivaluedHashMap<>(); + headers.put(HttpHeaders.AUTHORIZATION, Collections.singletonList("TEST")); Mockito.lenient().doReturn(headers).when(reactiveRequestContext).getHeaders(); Mockito.lenient().doReturn(restClientRequestContext).when(reactiveRequestContext).getRestClientRequestContext(); Mockito.lenient().doAnswer(invocationOnMock -> restClientRequestContext.setSuspended(true))