Skip to content

Commit bf2bd2f

Browse files
committed
pass HttpRequest to ServerBaseUrlCustomizer
1 parent e14f975 commit bf2bd2f

File tree

6 files changed

+23
-16
lines changed

6 files changed

+23
-16
lines changed

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

+4-1
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.HttpRequest;
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 request the request.
3841
* @return the customised serverBaseUrl
3942
*/
40-
String customize(String serverBaseUrl);
43+
String customize(String serverBaseUrl, HttpRequest request);
4144
}

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

+3-2
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.HttpRequest;
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, HttpRequest httpRequest) {
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, httpRequest);
499500
}
500501
}
501502

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

+11-10
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.springframework.context.ApplicationContext;
6363
import org.springframework.test.util.ReflectionTestUtils;
6464
import org.springframework.web.bind.annotation.RequestMethod;
65+
import org.springframework.mock.http.client.MockClientHttpRequest;
6566

6667
import static java.util.Arrays.asList;
6768
import static java.util.Collections.singletonList;
@@ -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 MockClientHttpRequest());
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 MockClientHttpRequest());
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, request) -> 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 MockClientHttpRequest());
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, request) -> serverBaseUrl.replace("/context-path/second-path", "");
269270
serverBaseUrlCustomizerList.add(serverBaseUrlCustomiser2);
270271

271-
openAPIService.setServerBaseUrl(generatedUrl);
272+
openAPIService.setServerBaseUrl(generatedUrl, new MockClientHttpRequest());
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, request) -> serverBaseUrl.replace("/second-path", "");
278279
serverBaseUrlCustomizerList.add(serverBaseUrlCustomiser3);
279280

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

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public Mono<byte[]> openapiYaml(ServerHttpRequest serverHttpRequest, Locale loca
131131
protected void calculateServerUrl(ServerHttpRequest serverHttpRequest, String apiDocsUrl, Locale locale) {
132132
super.initOpenAPIBuilder(locale);
133133
URI uri = getActuatorURI(serverHttpRequest.getURI().getScheme(), serverHttpRequest.getURI().getHost());
134-
openAPIService.setServerBaseUrl(uri.toString());
134+
openAPIService.setServerBaseUrl(uri.toString(), serverHttpRequest);
135135
}
136136

137137
@Override

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ protected void getWebFluxRouterFunctionPaths(Locale locale, OpenAPI openAPI) {
229229
protected void calculateServerUrl(ServerHttpRequest serverHttpRequest, String apiDocsUrl, Locale locale) {
230230
initOpenAPIBuilder(locale);
231231
String serverUrl = getServerUrl(serverHttpRequest, apiDocsUrl);
232-
openAPIService.setServerBaseUrl(serverUrl);
232+
openAPIService.setServerBaseUrl(serverUrl, serverHttpRequest);
233233
}
234234

235235
/**

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555

5656
import org.springframework.aop.support.AopUtils;
5757
import org.springframework.beans.factory.ObjectFactory;
58+
import org.springframework.http.server.ServletServerHttpRequest;
5859
import org.springframework.util.CollectionUtils;
5960
import org.springframework.util.MimeType;
6061
import org.springframework.web.bind.annotation.RequestMethod;
@@ -244,7 +245,8 @@ private Comparator<RequestMappingInfo> byReversedRequestMappingInfos() {
244245
protected void calculateServerUrl(HttpServletRequest request, String apiDocsUrl, Locale locale) {
245246
super.initOpenAPIBuilder(locale);
246247
String calculatedUrl = getServerUrl(request, apiDocsUrl);
247-
openAPIService.setServerBaseUrl(calculatedUrl);
248+
ServletServerHttpRequest serverRequest = request != null ? new ServletServerHttpRequest(request) : null;
249+
openAPIService.setServerBaseUrl(calculatedUrl, serverRequest);
248250
}
249251

250252
/**

0 commit comments

Comments
 (0)