Fail fast when base path and an endpoint mapping are set to '/'

Throw an exception if actuator is running on the main server port and
the base path and an individual mapping are set to '/'.

See gh-45251

Signed-off-by: yongjunhong <dev.yongjunh@gmail.com>
This commit is contained in:
yongjunhong 2025-04-22 15:54:56 +09:00 committed by Phillip Webb
parent c46d19f126
commit 8f535b266c
2 changed files with 40 additions and 0 deletions

View File

@ -69,6 +69,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
*
* @author Andy Wilkinson
* @author Phillip Webb
* @author Yongjun Hong
* @since 2.0.0
*/
@ManagementContextConfiguration(proxyBeanMethods = false)
@ -93,6 +94,18 @@ public class WebMvcEndpointManagementContextConfiguration {
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
if (basePath.isEmpty() && ManagementPortType.get(environment).equals(ManagementPortType.SAME)) {
for (ExposableWebEndpoint endpoint : webEndpoints) {
if ("/".equals(endpoint.getRootPath())) {
throw new IllegalStateException(
"Management endpoints and endpoint path are both mapped to '/' on the server port which will "
+ "block access to other endpoints. Please use a different path for management endpoints or "
+ "map them to a dedicated management port.");
}
}
}
boolean shouldRegisterLinksMapping = shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes,
corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath),

View File

@ -0,0 +1,27 @@
package smoketest.actuator;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.boot.SpringApplication;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
/**
* Verifies that an exception is thrown when management and server endpoint paths
* conflict.
*
* @author Yongjun Hong
*/
class ManagementEndpointConflictSmokeTest {
@Test
void shouldThrowExceptionWhenManagementAndServerPathsConflict() {
assertThatThrownBy(() -> {
SpringApplication.run(SampleActuatorApplication.class, "--management.endpoints.web.base-path=/",
"--management.endpoints.web.path-mapping.health=/");
}).isInstanceOf(BeanCreationException.class)
.hasMessageContaining("Management endpoints and endpoint path are both mapped to '/'");
}
}