Skip to content

Commit 37a6fef

Browse files
committed
Changes report: Add logs to notify when SpringDocs/Scalar is enabled because SpringDocs/Scalar is enabled by default (#3090) #3122
1 parent 15300ba commit 37a6fef

File tree

7 files changed

+215
-10
lines changed

7 files changed

+215
-10
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
7777
import org.springdoc.core.customizers.SpringDocCustomizers;
7878
import org.springdoc.core.discoverer.SpringDocParameterNameDiscoverer;
79+
import org.springdoc.core.events.SpringDocAppInitializer;
7980
import org.springdoc.core.extractor.MethodParameterPojoExtractor;
8081
import org.springdoc.core.filters.GlobalOpenApiMethodFilter;
8182
import org.springdoc.core.filters.OpenApiMethodFilter;
@@ -724,4 +725,17 @@ SchemaUtils schemaUtils(Optional<SpringDocKotlinUtils> springDocKotlinUtils){
724725
MethodParameterPojoExtractor methodParameterPojoExtractor(SchemaUtils schemaUtils){
725726
return new MethodParameterPojoExtractor(schemaUtils);
726727
}
728+
729+
/**
730+
* Spring doc app initializer spring doc app initializer.
731+
*
732+
* @param springDocConfigProperties the spring doc config properties
733+
* @return the spring doc app initializer
734+
*/
735+
@Bean
736+
@ConditionalOnMissingBean(name = "springDocAppInitializer")
737+
@Lazy(false)
738+
SpringDocAppInitializer springDocAppInitializer(SpringDocConfigProperties springDocConfigProperties){
739+
return new SpringDocAppInitializer(springDocConfigProperties.getApiDocs().getPath(), SPRINGDOC_ENABLED);
740+
}
727741
}
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: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import com.scalar.maven.webjar.ScalarProperties;
3030
import org.springdoc.core.configuration.SpringDocConfiguration;
31+
import org.springdoc.core.events.SpringDocAppInitializer;
3132
import org.springdoc.core.properties.SpringDocConfigProperties;
3233

3334
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
@@ -46,8 +47,9 @@
4647
import org.springframework.context.annotation.Lazy;
4748
import org.springframework.web.server.adapter.ForwardedHeaderTransformer;
4849

49-
import static org.springdoc.core.utils.Constants.SPRINGDOC_SWAGGER_UI_ENABLED;
50+
import static org.springdoc.core.utils.Constants.SCALAR_ENABLED;
5051
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
52+
import static org.springdoc.scalar.ScalarConstants.DEFAULT_SCALAR_ACTUATOR_PATH;
5153

5254
/**
5355
* The type Scalar configuration.
@@ -56,11 +58,10 @@
5658
*/
5759
@Lazy(false)
5860
@Configuration(proxyBeanMethods = false)
59-
@ConditionalOnProperty(name = SPRINGDOC_SWAGGER_UI_ENABLED, matchIfMissing = true)
61+
@ConditionalOnProperty(name = SCALAR_ENABLED, matchIfMissing = true)
6062
@ConditionalOnWebApplication(type = Type.REACTIVE)
6163
@ConditionalOnBean(SpringDocConfiguration.class)
6264
@EnableConfigurationProperties(ScalarProperties.class)
63-
@ConditionalOnProperty(prefix = "scalar", name = "enabled", havingValue = "true", matchIfMissing = true)
6465
public class ScalarConfiguration {
6566

6667
/**
@@ -90,6 +91,20 @@ ForwardedHeaderTransformer forwardedHeaderTransformer() {
9091
return new ForwardedHeaderTransformer();
9192
}
9293

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+
93108
/**
94109
* The type Swagger actuator welcome configuration.
95110
*/
@@ -111,6 +126,18 @@ static class SwaggerActuatorWelcomeConfiguration {
111126
ScalarActuatorController scalarActuatorController(ScalarProperties properties, WebEndpointProperties webEndpointProperties) {
112127
return new ScalarActuatorController(properties,webEndpointProperties);
113128
}
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);
140+
}
114141
}
115142

116143
}

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
}

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

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

2727
package org.springdoc.webmvc.scalar;
2828

2929
import com.scalar.maven.webjar.ScalarProperties;
3030
import org.springdoc.core.configuration.SpringDocConfiguration;
31+
import org.springdoc.core.events.SpringDocAppInitializer;
3132
import org.springdoc.core.properties.SpringDocConfigProperties;
3233

3334
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
@@ -47,8 +48,9 @@
4748
import org.springframework.context.annotation.Lazy;
4849
import org.springframework.web.filter.ForwardedHeaderFilter;
4950

50-
import static org.springdoc.core.utils.Constants.SPRINGDOC_SWAGGER_UI_ENABLED;
51+
import static org.springdoc.core.utils.Constants.SCALAR_ENABLED;
5152
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
53+
import static org.springdoc.scalar.ScalarConstants.DEFAULT_SCALAR_ACTUATOR_PATH;
5254

5355
/**
5456
* The type Scalar configuration.
@@ -57,11 +59,10 @@
5759
*/
5860
@Lazy(false)
5961
@Configuration(proxyBeanMethods = false)
60-
@ConditionalOnProperty(name = SPRINGDOC_SWAGGER_UI_ENABLED, matchIfMissing = true)
62+
@ConditionalOnProperty(name = SCALAR_ENABLED, matchIfMissing = true)
6163
@ConditionalOnWebApplication(type = Type.SERVLET)
6264
@ConditionalOnBean(SpringDocConfiguration.class)
6365
@EnableConfigurationProperties(ScalarProperties.class)
64-
@ConditionalOnProperty(prefix = "scalar", name = "enabled", havingValue = "true", matchIfMissing = true)
6566
public class ScalarConfiguration {
6667

6768
/**
@@ -76,7 +77,7 @@ public class ScalarConfiguration {
7677
@ConditionalOnMissingBean
7778
@Lazy(false)
7879
ScalarWebMvcController scalarWebMvcController(ScalarProperties scalarProperties, SpringDocConfigProperties springDocConfigProperties) {
79-
return new ScalarWebMvcController(scalarProperties,springDocConfigProperties);
80+
return new ScalarWebMvcController(scalarProperties, springDocConfigProperties);
8081
}
8182

8283
/**
@@ -91,6 +92,20 @@ public FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
9192
return new FilterRegistrationBean<>(new ForwardedHeaderFilter());
9293
}
9394

95+
/**
96+
* Spring doc app initializer spring doc app initializer.
97+
*
98+
* @param scalarProperties the spring doc config properties
99+
* @return the spring doc app initializer
100+
*/
101+
@Bean
102+
@ConditionalOnMissingBean(name = "springDocScalarInitializer")
103+
@ConditionalOnProperty(name = SPRINGDOC_USE_MANAGEMENT_PORT, havingValue = "false", matchIfMissing = true)
104+
@Lazy(false)
105+
SpringDocAppInitializer springDocScalarInitializer(ScalarProperties scalarProperties) {
106+
return new SpringDocAppInitializer(scalarProperties.getPath(), SCALAR_ENABLED);
107+
}
108+
94109
/**
95110
* The type Swagger actuator welcome configuration.
96111
*/
@@ -109,8 +124,21 @@ static class SwaggerActuatorWelcomeConfiguration {
109124
@Bean
110125
@ConditionalOnMissingBean
111126
@Lazy(false)
112-
ScalarActuatorController scalarActuatorController(ScalarProperties properties, WebEndpointProperties webEndpointProperties) {
113-
return new ScalarActuatorController(properties,webEndpointProperties);
127+
ScalarActuatorController scalarActuatorController(ScalarProperties properties, WebEndpointProperties webEndpointProperties) {
128+
return new ScalarActuatorController(properties, webEndpointProperties);
129+
}
130+
131+
132+
/**
133+
* Spring doc scalar initializer spring doc app initializer.
134+
*
135+
* @return the spring doc app initializer
136+
*/
137+
@Bean
138+
@ConditionalOnMissingBean(name = "springDocScalarInitializer")
139+
@Lazy(false)
140+
SpringDocAppInitializer springDocScalarInitializer() {
141+
return new SpringDocAppInitializer(DEFAULT_SCALAR_ACTUATOR_PATH, SCALAR_ENABLED);
114142
}
115143
}
116144

springdoc-openapi-starter-webmvc-ui/src/main/java/org/springdoc/webmvc/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;
@@ -51,6 +52,7 @@
5152
import org.springframework.context.annotation.Configuration;
5253
import org.springframework.context.annotation.Lazy;
5354

55+
import static org.springdoc.core.utils.Constants.DEFAULT_SWAGGER_UI_ACTUATOR_PATH;
5456
import static org.springdoc.core.utils.Constants.SPRINGDOC_SWAGGER_UI_ENABLED;
5557
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_MANAGEMENT_PORT;
5658
import static org.springdoc.core.utils.Constants.SPRINGDOC_USE_ROOT_PATH;
@@ -170,6 +172,20 @@ SwaggerResourceResolver swaggerResourceResolver(SwaggerUiConfigProperties swagge
170172
return new SwaggerResourceResolver(swaggerUiConfigProperties);
171173
}
172174

175+
/**
176+
* Spring doc swagger initializer spring doc swagger initializer.
177+
*
178+
* @param swaggerUiConfigProperties the swagger ui config properties
179+
* @return the spring doc swagger initializer
180+
*/
181+
@Bean
182+
@ConditionalOnMissingBean(name = "springDocSwaggerInitializer")
183+
@ConditionalOnProperty(name = SPRINGDOC_USE_MANAGEMENT_PORT, havingValue = "false", matchIfMissing = true)
184+
@Lazy(false)
185+
SpringDocAppInitializer springDocSwaggerInitializer(SwaggerUiConfigProperties swaggerUiConfigProperties) {
186+
return new SpringDocAppInitializer(swaggerUiConfigProperties.getPath(), SPRINGDOC_SWAGGER_UI_ENABLED);
187+
}
188+
173189
/**
174190
* The type Swagger actuator welcome configuration.
175191
*/
@@ -192,5 +208,17 @@ static class SwaggerActuatorWelcomeConfiguration {
192208
SwaggerWelcomeActuator swaggerActuatorWelcome(SwaggerUiConfigProperties swaggerUiConfig, SpringDocConfigProperties springDocConfigProperties, WebEndpointProperties webEndpointProperties) {
193209
return new SwaggerWelcomeActuator(swaggerUiConfig, springDocConfigProperties, webEndpointProperties);
194210
}
211+
212+
/**
213+
* Spring doc swagger initializer spring doc app initializer.
214+
*
215+
* @return the spring doc app initializer
216+
*/
217+
@Bean
218+
@ConditionalOnMissingBean(name = "springDocSwaggerInitializer")
219+
@Lazy(false)
220+
SpringDocAppInitializer springDocSwaggerInitializer() {
221+
return new SpringDocAppInitializer(DEFAULT_SWAGGER_UI_ACTUATOR_PATH, SPRINGDOC_SWAGGER_UI_ENABLED);
222+
}
195223
}
196224
}

0 commit comments

Comments
 (0)