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:
parent
c46d19f126
commit
8f535b266c
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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 '/'");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue