Skip to content

Commit fa05431

Browse files
committed
code review
1 parent ce7f0f7 commit fa05431

File tree

7 files changed

+214
-45
lines changed

7 files changed

+214
-45
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocConfiguration.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@
4444
import io.swagger.v3.oas.models.OpenAPI;
4545
import io.swagger.v3.oas.models.media.ObjectSchema;
4646
import io.swagger.v3.oas.models.media.Schema;
47-
import org.slf4j.Logger;
48-
import org.slf4j.LoggerFactory;
4947
import org.springdoc.api.ErrorMessage;
5048
import org.springdoc.api.OpenApiResourceNotFoundException;
5149
import org.springdoc.core.conditions.CacheOrGroupedOpenApiCondition;
@@ -78,6 +76,7 @@
7876
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
7977
import org.springdoc.core.customizers.SpringDocCustomizers;
8078
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
79+
import org.springdoc.core.events.SpringDocAppInitializer;
8180
import org.springdoc.core.extractor.MethodParameterPojoExtractor;
8281
import org.springdoc.core.filters.GlobalOpenApiMethodFilter;
8382
import org.springdoc.core.filters.OpenApiMethodFilter;
@@ -103,8 +102,6 @@
103102
import org.springdoc.core.utils.PropertyResolverUtils;
104103
import org.springdoc.core.utils.SchemaUtils;
105104
import org.springdoc.core.utils.SpringDocKotlinUtils;
106-
import org.springframework.boot.context.event.ApplicationReadyEvent;
107-
import org.springframework.context.event.EventListener;
108105
import reactor.core.publisher.Flux;
109106

110107
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
@@ -156,13 +153,6 @@
156153
@ConditionalOnWebApplication
157154
public class SpringDocConfiguration {
158155

159-
protected static final Logger LOGGER = LoggerFactory.getLogger(SpringDocConfiguration.class);
160-
161-
@EventListener(ApplicationReadyEvent.class)
162-
public void init() {
163-
LOGGER.warn("SpringDoc /api-docs endpoint is enabled by default. To disable it in production, set the property '{}=false' in your production profile configuration.", SPRINGDOC_ENABLED);
164-
}
165-
166156
/**
167157
* The constant BINDRESULT_CLASS.
168158
*/
@@ -728,4 +718,17 @@ SchemaUtils schemaUtils(Optional<SpringDocKotlinUtils> springDocKotlinUtils){
728718
MethodParameterPojoExtractor methodParameterPojoExtractor(SchemaUtils schemaUtils){
729719
return new MethodParameterPojoExtractor(schemaUtils);
730720
}
721+
722+
/**
723+
* Spring doc app initializer spring doc app initializer.
724+
*
725+
* @param springDocConfigProperties the spring doc config properties
726+
* @return the spring doc app initializer
727+
*/
728+
@Bean
729+
@ConditionalOnMissingBean(name = "springDocAppInitializer")
730+
@Lazy(false)
731+
SpringDocAppInitializer springDocAppInitializer(SpringDocConfigProperties springDocConfigProperties){
732+
return new SpringDocAppInitializer(springDocConfigProperties.getApiDocs().getPath(), SPRINGDOC_ENABLED);
733+
}
731734
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
*
3+
* *
4+
* * *
5+
* * * *
6+
* * * * *
7+
* * * * * * Copyright 2019-2025 the original author or authors.
8+
* * * * * *
9+
* * * * * * Licensed under the Apache License, Version 2.0 (the "License");
10+
* * * * * * you may not use this file except in compliance with the License.
11+
* * * * * * You may obtain a copy of the License at
12+
* * * * * *
13+
* * * * * * https://www.apache.org/licenses/LICENSE-2.0
14+
* * * * * *
15+
* * * * * * Unless required by applicable law or agreed to in writing, software
16+
* * * * * * distributed under the License is distributed on an "AS IS" BASIS,
17+
* * * * * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18+
* * * * * * See the License for the specific language governing permissions and
19+
* * * * * * limitations under the License.
20+
* * * * *
21+
* * * *
22+
* * *
23+
* *
24+
*
25+
*/
26+
27+
package org.springdoc.core.events;
28+
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
31+
32+
import org.springframework.boot.context.event.ApplicationReadyEvent;
33+
import org.springframework.context.event.EventListener;
34+
35+
/**
36+
* The type Spring doc app initializer.
37+
*
38+
* @author bnasslahsen
39+
*/
40+
public class SpringDocAppInitializer {
41+
42+
/**
43+
* The Endpoint.
44+
*/
45+
private final String endpoint;
46+
47+
/**
48+
* The Property.
49+
*/
50+
private final String property;
51+
52+
/**
53+
* The constant LOGGER.
54+
*/
55+
private static final Logger LOGGER = LoggerFactory.getLogger(SpringDocAppInitializer.class);
56+
57+
/**
58+
* Instantiates a new Spring doc app initializer.
59+
*
60+
* @param endpoint the endpoint
61+
* @param property the property
62+
*/
63+
public SpringDocAppInitializer(String endpoint, String property) {
64+
this.endpoint = endpoint;
65+
this.property = property;
66+
}
67+
68+
/**
69+
* Init.
70+
*/
71+
@EventListener(ApplicationReadyEvent.class)
72+
public void init() {
73+
LOGGER.warn("SpringDoc {} endpoint is enabled by default. To disable it in production, set the property '{}=false'", endpoint, property);
74+
}
75+
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/Constants.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,11 @@ public final class Constants {
439439
*/
440440
public static final String SPRINGDOC_EXPLICIT_OBJECT_SCHEMA = "springdoc.explicit-object-schema";
441441

442+
/**
443+
* The constant SCALAR_ENABLED.
444+
*/
445+
public static final String SCALAR_ENABLED= "scalar.enabled";
446+
442447
/**
443448
* Instantiates a new Constants.
444449
*/

springdoc-openapi-starter-webflux-scalar/src/main/java/org/springdoc/webflux/scalar/ScalarConfiguration.java

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,14 @@
2121
* * * *
2222
* * *
2323
* *
24-
*
24+
*
2525
*/
2626

2727
package org.springdoc.webflux.scalar;
2828

2929
import com.scalar.maven.webjar.ScalarProperties;
30-
import org.slf4j.Logger;
31-
import org.slf4j.LoggerFactory;
3230
import org.springdoc.core.configuration.SpringDocConfiguration;
31+
import org.springdoc.core.events.SpringDocAppInitializer;
3332
import org.springdoc.core.properties.SpringDocConfigProperties;
3433

3534
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
@@ -42,16 +41,15 @@
4241
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4342
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
4443
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
45-
import org.springframework.boot.context.event.ApplicationReadyEvent;
4644
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4745
import org.springframework.context.annotation.Bean;
4846
import org.springframework.context.annotation.Configuration;
4947
import org.springframework.context.annotation.Lazy;
50-
import org.springframework.context.event.EventListener;
5148
import org.springframework.web.server.adapter.ForwardedHeaderTransformer;
5249

53-
import static org.springdoc.core.utils.Constants.SPRINGDOC_SWAGGER_UI_ENABLED;
50+
import static org.springdoc.core.utils.Constants.SCALAR_ENABLED;
5451
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
52+
import static org.springdoc.scalar.ScalarConstants.DEFAULT_SCALAR_ACTUATOR_PATH;
5553

5654
/**
5755
* The type Scalar configuration.
@@ -60,21 +58,12 @@
6058
*/
6159
@Lazy(false)
6260
@Configuration(proxyBeanMethods = false)
63-
@ConditionalOnProperty(name = SPRINGDOC_SWAGGER_UI_ENABLED, matchIfMissing = true)
61+
@ConditionalOnProperty(name = SCALAR_ENABLED, matchIfMissing = true)
6462
@ConditionalOnWebApplication(type = Type.REACTIVE)
6563
@ConditionalOnBean(SpringDocConfiguration.class)
6664
@EnableConfigurationProperties(ScalarProperties.class)
67-
@ConditionalOnProperty(prefix = "scalar", name = "enabled", havingValue = "true", matchIfMissing = true)
6865
public class ScalarConfiguration {
6966

70-
protected static final Logger LOGGER = LoggerFactory.getLogger(ScalarConfiguration.class);
71-
72-
@EventListener(ApplicationReadyEvent.class)
73-
public void init() {
74-
LOGGER.warn("SpringDoc Scalar is enabled by default. To disable it in production, set the property 'scalar.enabled=false' in your production profile configuration.");
75-
}
76-
77-
7867
/**
7968
* Scalar web mvc controller scalar web mvc controller.
8069
*
@@ -87,7 +76,7 @@ public void init() {
8776
@ConditionalOnMissingBean
8877
@Lazy(false)
8978
ScalarWebFluxController scalarWebMvcController(ScalarProperties scalarProperties, SpringDocConfigProperties springDocConfigProperties) {
90-
return new ScalarWebFluxController(scalarProperties,springDocConfigProperties);
79+
return new ScalarWebFluxController(scalarProperties, springDocConfigProperties);
9180
}
9281

9382
/**
@@ -102,6 +91,20 @@ ForwardedHeaderTransformer forwardedHeaderTransformer() {
10291
return new ForwardedHeaderTransformer();
10392
}
10493

94+
/**
95+
* Spring doc app initializer spring doc app initializer.
96+
*
97+
* @param scalarProperties the spring doc config properties
98+
* @return the spring doc app initializer
99+
*/
100+
@Bean
101+
@ConditionalOnMissingBean(name = "springDocScalarInitializer")
102+
@ConditionalOnProperty(name = SPRINGDOC_USE_MANAGEMENT_PORT, havingValue = "false", matchIfMissing = true)
103+
@Lazy(false)
104+
SpringDocAppInitializer springDocScalarInitializer(ScalarProperties scalarProperties) {
105+
return new SpringDocAppInitializer(scalarProperties.getPath(), SCALAR_ENABLED);
106+
}
107+
105108
/**
106109
* The type Swagger actuator welcome configuration.
107110
*/
@@ -120,8 +123,20 @@ static class SwaggerActuatorWelcomeConfiguration {
120123
@Bean
121124
@ConditionalOnMissingBean
122125
@Lazy(false)
123-
ScalarActuatorController scalarActuatorController(ScalarProperties properties, WebEndpointProperties webEndpointProperties) {
124-
return new ScalarActuatorController(properties,webEndpointProperties);
126+
ScalarActuatorController scalarActuatorController(ScalarProperties properties, WebEndpointProperties webEndpointProperties) {
127+
return new ScalarActuatorController(properties, webEndpointProperties);
128+
}
129+
130+
/**
131+
* Spring doc scalar initializer spring doc app initializer.
132+
*
133+
* @return the spring doc app initializer
134+
*/
135+
@Bean
136+
@ConditionalOnMissingBean(name = "springDocScalarInitializer")
137+
@Lazy(false)
138+
SpringDocAppInitializer springDocScalarInitializer() {
139+
return new SpringDocAppInitializer(DEFAULT_SCALAR_ACTUATOR_PATH, SCALAR_ENABLED);
125140
}
126141
}
127142

springdoc-openapi-starter-webflux-ui/src/main/java/org/springdoc/webflux/ui/SwaggerConfig.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Optional;
3030

3131
import org.springdoc.core.configuration.SpringDocConfiguration;
32+
import org.springdoc.core.events.SpringDocAppInitializer;
3233
import org.springdoc.core.properties.SpringDocConfigProperties;
3334
import org.springdoc.core.properties.SwaggerUiConfigProperties;
3435
import org.springdoc.core.properties.SwaggerUiOAuthProperties;
@@ -53,6 +54,7 @@
5354
import org.springframework.context.annotation.Lazy;
5455
import org.springframework.web.reactive.config.WebFluxConfigurer;
5556

57+
import static org.springdoc.core.utils.Constants.DEFAULT_SWAGGER_UI_ACTUATOR_PATH;
5658
import static org.springdoc.core.utils.Constants.SPRINGDOC_SWAGGER_UI_ENABLED;
5759
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
5860
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_ROOT_PATH;
@@ -182,6 +184,20 @@ SwaggerResourceResolver swaggerResourceResolver(SwaggerUiConfigProperties swagge
182184
return new SwaggerResourceResolver(swaggerUiConfigProperties);
183185
}
184186

187+
/**
188+
* Spring doc swagger initializer spring doc swagger initializer.
189+
*
190+
* @param swaggerUiConfigProperties the swagger ui config properties
191+
* @return the spring doc swagger initializer
192+
*/
193+
@Bean
194+
@ConditionalOnMissingBean(name = "springDocSwaggerInitializer")
195+
@ConditionalOnProperty(name = SPRINGDOC_USE_MANAGEMENT_PORT, havingValue = "false", matchIfMissing = true)
196+
@Lazy(false)
197+
SpringDocAppInitializer springDocSwaggerInitializer(SwaggerUiConfigProperties swaggerUiConfigProperties) {
198+
return new SpringDocAppInitializer(swaggerUiConfigProperties.getPath(), SPRINGDOC_SWAGGER_UI_ENABLED);
199+
}
200+
185201
/**
186202
* The type Swagger actuator welcome configuration.
187203
*
@@ -207,5 +223,17 @@ SwaggerWelcomeActuator swaggerActuatorWelcome(SwaggerUiConfigProperties swaggerU
207223
WebEndpointProperties webEndpointProperties) {
208224
return new SwaggerWelcomeActuator(swaggerUiConfig, springDocConfigProperties, webEndpointProperties);
209225
}
226+
227+
/**
228+
* Spring doc swagger initializer spring doc app initializer.
229+
*
230+
* @return the spring doc app initializer
231+
*/
232+
@Bean
233+
@ConditionalOnMissingBean(name = "springDocSwaggerInitializer")
234+
@Lazy(false)
235+
SpringDocAppInitializer springDocSwaggerInitializer() {
236+
return new SpringDocAppInitializer(DEFAULT_SWAGGER_UI_ACTUATOR_PATH, SPRINGDOC_SWAGGER_UI_ENABLED);
237+
}
210238
}
211239
}

0 commit comments

Comments
 (0)