Skip to content

Commit 344ac78

Browse files
committed
pass HttpHeaders to ServerBaseUrlCustomizer
1 parent e14f975 commit 344ac78

File tree

7 files changed

+28
-16
lines changed

7 files changed

+28
-16
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/customizers/ServerBaseUrlCustomizer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
package org.springdoc.core.customizers;
2626

27+
import org.springframework.http.HttpHeaders;
28+
2729
/**
2830
* The interface Server Base URL customiser.
2931
* @author skylar -stark
@@ -35,7 +37,8 @@ public interface ServerBaseUrlCustomizer {
3537
* Customise.
3638
*
3739
* @param serverBaseUrl the serverBaseUrl.
40+
* @param httpHeaders request headers.
3841
* @return the customised serverBaseUrl
3942
*/
40-
String customize(String serverBaseUrl);
43+
String customize(String serverBaseUrl, HttpHeaders httpHeaders);
4144
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/OpenAPIService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
import org.springframework.core.annotation.AnnotatedElementUtils;
8282
import org.springframework.core.annotation.AnnotationUtils;
8383
import org.springframework.core.type.filter.AnnotationTypeFilter;
84+
import org.springframework.http.HttpHeaders;
8485
import org.springframework.stereotype.Controller;
8586
import org.springframework.util.CollectionUtils;
8687
import org.springframework.web.bind.annotation.ControllerAdvice;
@@ -490,12 +491,12 @@ public Schema resolveProperties(Schema schema, Locale locale) {
490491
*
491492
* @param serverBaseUrl the server base url
492493
*/
493-
public void setServerBaseUrl(String serverBaseUrl) {
494+
public void setServerBaseUrl(String serverBaseUrl, HttpHeaders httpHeaders) {
494495
String customServerBaseUrl = serverBaseUrl;
495496

496497
if (serverBaseUrlCustomizers.isPresent()) {
497498
for (ServerBaseUrlCustomizer customizer : serverBaseUrlCustomizers.get()) {
498-
customServerBaseUrl = customizer.customize(customServerBaseUrl);
499+
customServerBaseUrl = customizer.customize(customServerBaseUrl, httpHeaders);
499500
}
500501
}
501502

springdoc-openapi-starter-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060

6161
import org.springframework.beans.factory.ObjectFactory;
6262
import org.springframework.context.ApplicationContext;
63+
import org.springframework.http.HttpHeaders;
6364
import org.springframework.test.util.ReflectionTestUtils;
6465
import org.springframework.web.bind.annotation.RequestMethod;
6566

@@ -190,7 +191,7 @@ void preLoadingModeShouldNotOverwriteServers() throws InterruptedException {
190191
doCallRealMethod().when(openAPIService).updateServers(any());
191192
when(openAPIService.getCachedOpenAPI(any())).thenCallRealMethod();
192193
doAnswer(new CallsRealMethods()).when(openAPIService).setServersPresent(true);
193-
doAnswer(new CallsRealMethods()).when(openAPIService).setServerBaseUrl(any());
194+
doAnswer(new CallsRealMethods()).when(openAPIService).setServerBaseUrl(any(), any());
194195
doAnswer(new CallsRealMethods()).when(openAPIService).setCachedOpenAPI(any(), any());
195196

196197
String customUrl = "https://custom.com";
@@ -212,7 +213,7 @@ properties, springDocProviders, new SpringDocCustomizers(Optional.of(singletonLi
212213
Thread.sleep(1_000);
213214

214215
// emulate generating base url
215-
openAPIService.setServerBaseUrl(generatedUrl);
216+
openAPIService.setServerBaseUrl(generatedUrl, new HttpHeaders());
216217
openAPIService.updateServers(openAPI);
217218
Locale locale = Locale.US;
218219
OpenAPI after = resource.getOpenApi(locale);
@@ -224,7 +225,7 @@ properties, springDocProviders, new SpringDocCustomizers(Optional.of(singletonLi
224225
void serverBaseUrlCustomisersTest() throws InterruptedException {
225226
doCallRealMethod().when(openAPIService).updateServers(any());
226227
when(openAPIService.getCachedOpenAPI(any())).thenCallRealMethod();
227-
doAnswer(new CallsRealMethods()).when(openAPIService).setServerBaseUrl(any());
228+
doAnswer(new CallsRealMethods()).when(openAPIService).setServerBaseUrl(any(), any());
228229
doAnswer(new CallsRealMethods()).when(openAPIService).setCachedOpenAPI(any(), any());
229230

230231
SpringDocConfigProperties properties = new SpringDocConfigProperties();
@@ -247,37 +248,37 @@ springDocProviders, new SpringDocCustomizers(Optional.empty(),Optional.empty(),O
247248

248249
// Test that setting generated URL works fine with no customizers present
249250
String generatedUrl = "https://generated-url.com/context-path";
250-
openAPIService.setServerBaseUrl(generatedUrl);
251+
openAPIService.setServerBaseUrl(generatedUrl, new HttpHeaders());
251252
openAPIService.updateServers(openAPI);
252253
OpenAPI after = resource.getOpenApi(locale);
253254
assertThat(after.getServers().get(0).getUrl(), is(generatedUrl));
254255

255256
// Test that adding a serverBaseUrlCustomizer has the desired effect
256-
ServerBaseUrlCustomizer serverBaseUrlCustomizer = serverBaseUrl -> serverBaseUrl.replace("/context-path", "");
257+
ServerBaseUrlCustomizer serverBaseUrlCustomizer = (serverBaseUrl, headers) -> serverBaseUrl.replace("/context-path", "");
257258
List<ServerBaseUrlCustomizer> serverBaseUrlCustomizerList = new ArrayList<>();
258259
serverBaseUrlCustomizerList.add(serverBaseUrlCustomizer);
259260

260261
ReflectionTestUtils.setField(openAPIService, "serverBaseUrlCustomizers", Optional.of(serverBaseUrlCustomizerList));
261-
openAPIService.setServerBaseUrl(generatedUrl);
262+
openAPIService.setServerBaseUrl(generatedUrl, new HttpHeaders());
262263
openAPIService.updateServers(openAPI);
263264
after = resource.getOpenApi(locale);
264265
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com"));
265266

266267
// Test that serverBaseUrlCustomisers are performed in order
267268
generatedUrl = "https://generated-url.com/context-path/second-path";
268-
ServerBaseUrlCustomizer serverBaseUrlCustomiser2 = serverBaseUrl -> serverBaseUrl.replace("/context-path/second-path", "");
269+
ServerBaseUrlCustomizer serverBaseUrlCustomiser2 = (serverBaseUrl, headers) -> serverBaseUrl.replace("/context-path/second-path", "");
269270
serverBaseUrlCustomizerList.add(serverBaseUrlCustomiser2);
270271

271-
openAPIService.setServerBaseUrl(generatedUrl);
272+
openAPIService.setServerBaseUrl(generatedUrl, new HttpHeaders());
272273
openAPIService.updateServers(openAPI);
273274
after = resource.getOpenApi(locale);
274275
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com/second-path"));
275276

276277
// Test that all serverBaseUrlCustomisers in the List are performed
277-
ServerBaseUrlCustomizer serverBaseUrlCustomiser3 = serverBaseUrl -> serverBaseUrl.replace("/second-path", "");
278+
ServerBaseUrlCustomizer serverBaseUrlCustomiser3 = (serverBaseUrl, headers) -> serverBaseUrl.replace("/second-path", "");
278279
serverBaseUrlCustomizerList.add(serverBaseUrlCustomiser3);
279280

280-
openAPIService.setServerBaseUrl(generatedUrl);
281+
openAPIService.setServerBaseUrl(generatedUrl, new HttpHeaders());
281282
openAPIService.updateServers(openAPI);
282283
after = resource.getOpenApi(locale);
283284
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com"));

springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.springframework.beans.factory.ObjectFactory;
4242
import org.springframework.boot.actuate.endpoint.web.annotation.RestControllerEndpoint;
4343
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
44+
import org.springframework.http.HttpHeaders;
4445
import org.springframework.http.MediaType;
4546
import org.springframework.http.server.reactive.ServerHttpRequest;
4647
import org.springframework.web.bind.annotation.GetMapping;
@@ -131,7 +132,7 @@ public Mono<byte[]> openapiYaml(ServerHttpRequest serverHttpRequest, Locale loca
131132
protected void calculateServerUrl(ServerHttpRequest serverHttpRequest, String apiDocsUrl, Locale locale) {
132133
super.initOpenAPIBuilder(locale);
133134
URI uri = getActuatorURI(serverHttpRequest.getURI().getScheme(), serverHttpRequest.getURI().getHost());
134-
openAPIService.setServerBaseUrl(uri.toString());
135+
openAPIService.setServerBaseUrl(uri.toString(), HttpHeaders.readOnlyHttpHeaders(serverHttpRequest.getHeaders()));
135136
}
136137

137138
@Override

springdoc-openapi-starter-webflux-api/src/main/java/org/springdoc/webflux/api/OpenApiResource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import reactor.core.publisher.Mono;
5252

5353
import org.springframework.beans.factory.ObjectFactory;
54+
import org.springframework.http.HttpHeaders;
5455
import org.springframework.http.server.reactive.ServerHttpRequest;
5556
import org.springframework.util.MimeType;
5657
import org.springframework.web.bind.annotation.RequestMethod;
@@ -229,7 +230,7 @@ protected void getWebFluxRouterFunctionPaths(Locale locale, OpenAPI openAPI) {
229230
protected void calculateServerUrl(ServerHttpRequest serverHttpRequest, String apiDocsUrl, Locale locale) {
230231
initOpenAPIBuilder(locale);
231232
String serverUrl = getServerUrl(serverHttpRequest, apiDocsUrl);
232-
openAPIService.setServerBaseUrl(serverUrl);
233+
openAPIService.setServerBaseUrl(serverUrl, HttpHeaders.readOnlyHttpHeaders(serverHttpRequest.getHeaders()));
233234
}
234235

235236
/**

springdoc-openapi-starter-webflux-api/src/test/java/test/org/springdoc/api/app81/SpringDocApp81Test.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.boot.autoconfigure.SpringBootApplication;
4040
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
4141
import org.springframework.context.annotation.ComponentScan;
42+
import org.springframework.http.HttpHeaders;
4243
import org.springframework.http.server.reactive.ServerHttpRequest;
4344
import org.springframework.web.method.HandlerMethod;
4445
import org.springframework.web.reactive.result.method.RequestMappingInfo;
@@ -67,6 +68,7 @@ public void shouldGenerateOperationIdsDeterministically() throws Exception {
6768
shuffleSpringHandlerMethods();
6869

6970
ServerHttpRequest request = mock(ServerHttpRequest.class);
71+
when(request.getHeaders()).thenReturn(new HttpHeaders());
7072
when(request.getURI()).thenReturn(URI.create("http://localhost"));
7173

7274
String expected = getContent("results/app81.json");

springdoc-openapi-starter-webmvc-api/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
import org.springframework.aop.support.AopUtils;
5757
import org.springframework.beans.factory.ObjectFactory;
58+
import org.springframework.http.HttpHeaders;
59+
import org.springframework.http.server.ServletServerHttpRequest;
5860
import org.springframework.util.CollectionUtils;
5961
import org.springframework.util.MimeType;
6062
import org.springframework.web.bind.annotation.RequestMethod;
@@ -244,7 +246,8 @@ private Comparator<RequestMappingInfo> byReversedRequestMappingInfos() {
244246
protected void calculateServerUrl(HttpServletRequest request, String apiDocsUrl, Locale locale) {
245247
super.initOpenAPIBuilder(locale);
246248
String calculatedUrl = getServerUrl(request, apiDocsUrl);
247-
openAPIService.setServerBaseUrl(calculatedUrl);
249+
ServletServerHttpRequest serverRequest = new ServletServerHttpRequest(request);
250+
openAPIService.setServerBaseUrl(calculatedUrl, HttpHeaders.readOnlyHttpHeaders(serverRequest.getHeaders()));
248251
}
249252

250253
/**

0 commit comments

Comments
 (0)