diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java index 222f67502c1..83a1bbf4c97 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java @@ -97,8 +97,11 @@ public class EndpointWebMvcAutoConfiguration implements ApplicationContextAware, public EndpointHandlerMapping endpointHandlerMapping() { EndpointHandlerMapping mapping = new EndpointHandlerMapping(mvcEndpoints() .getEndpoints()); - mapping.setDisabled(ManagementServerPort.get(this.applicationContext) != ManagementServerPort.SAME); - mapping.setPrefix(this.managementServerProperties.getContextPath()); + boolean disabled = ManagementServerPort.get(this.applicationContext) != ManagementServerPort.SAME; + mapping.setDisabled(disabled); + if (!disabled) { + mapping.setPrefix(this.managementServerProperties.getContextPath()); + } return mapping; } diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfiguration.java index 02465ce67d7..ae58892ab6f 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/ManagementSecurityAutoConfiguration.java @@ -218,7 +218,7 @@ public class ManagementSecurityAutoConfiguration { List paths = new ArrayList(endpoints.size()); for (MvcEndpoint endpoint : endpoints) { if (endpoint.isSensitive() == secure) { - paths.add(endpoint.getPath()); + paths.add(endpointHandlerMapping.getPrefix() + endpoint.getPath()); } } return paths.toArray(new String[paths.size()]); diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/EndpointHandlerMapping.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/EndpointHandlerMapping.java index 99420f240d3..6b325daaece 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/EndpointHandlerMapping.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/EndpointHandlerMapping.java @@ -138,6 +138,13 @@ public class EndpointHandlerMapping extends RequestMappingHandlerMapping impleme this.prefix = prefix; } + /** + * @return the prefix used in mappings + */ + public String getPrefix() { + return this.prefix; + } + /** * Sets if this mapping is disabled. */ @@ -158,4 +165,5 @@ public class EndpointHandlerMapping extends RequestMappingHandlerMapping impleme public Set getEndpoints() { return this.endpoints; } + } diff --git a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/EndpointsPropertiesSampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/EndpointsPropertiesSampleActuatorApplicationTests.java index 610913dfbfa..ddea001fbf8 100644 --- a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/EndpointsPropertiesSampleActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/EndpointsPropertiesSampleActuatorApplicationTests.java @@ -16,6 +16,8 @@ package sample.actuator; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -41,8 +43,6 @@ import org.springframework.security.crypto.codec.Base64; import org.springframework.web.client.DefaultResponseErrorHandler; import org.springframework.web.client.RestTemplate; -import static org.junit.Assert.assertEquals; - /** * Integration tests for endpoints configuration. * @@ -78,6 +78,12 @@ public class EndpointsPropertiesSampleActuatorApplicationTests { testError(); } + @Test + public void testCustomContextPath() throws Exception { + start(SampleActuatorApplication.class, "--management.contextPath=/admin"); + testHealth(); + } + private void testError() { @SuppressWarnings("rawtypes") ResponseEntity entity = getRestTemplate("user", "password").getForEntity( @@ -89,6 +95,18 @@ public class EndpointsPropertiesSampleActuatorApplicationTests { assertEquals(999, body.get("status")); } + private void testHealth() { + ResponseEntity entity = getRestTemplate().getForEntity( + "http://localhost:8080/admin/health", String.class); + assertEquals(HttpStatus.OK, entity.getStatusCode()); + String body = entity.getBody(); + assertEquals("ok", body); + } + + private RestTemplate getRestTemplate() { + return getRestTemplate(null, null); + } + private RestTemplate getRestTemplate(final String username, final String password) { List interceptors = new ArrayList(); @@ -122,5 +140,4 @@ public class EndpointsPropertiesSampleActuatorApplicationTests { return restTemplate; } - } diff --git a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementSampleActuatorApplicationTests.java b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementSampleActuatorApplicationTests.java index bea7493deda..bedc7e38b03 100644 --- a/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementSampleActuatorApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-actuator/src/test/java/sample/actuator/ManagementSampleActuatorApplicationTests.java @@ -51,7 +51,7 @@ public class ManagementSampleActuatorApplicationTests { @BeforeClass public static void start() throws Exception { final String[] args = new String[] { "--server.port=" + port, - "--management.port=" + managementPort, "--management.address=127.0.0.1" }; + "--management.port=" + managementPort, "--management.address=127.0.0.1", "--management.contextPath=/admin" }; Future future = Executors .newSingleThreadExecutor().submit( new Callable() { @@ -82,7 +82,7 @@ public class ManagementSampleActuatorApplicationTests { @Test public void testHealth() throws Exception { ResponseEntity entity = getRestTemplate().getForEntity( - "http://localhost:" + managementPort + "/health", String.class); + "http://localhost:" + managementPort + "/admin/health", String.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); assertEquals("ok", entity.getBody()); }