diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java index e209d50c1..ed364896b 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProvider.java @@ -123,7 +123,7 @@ public class DefaultManagementMetadataProvider implements ManagementMetadataProv String refinedContextPath = '/' + StringUtils.trimLeadingCharacter(contextPath, '/'); URL base = new URL(scheme, hostname, port, refinedContextPath); - String refinedStatusPath = StringUtils.trimLeadingCharacter(statusPath, '/'); + String refinedStatusPath = refinedStatusPath(statusPath, contextPath); return new URL(base, refinedStatusPath).toString(); } catch (MalformedURLException e) { @@ -133,6 +133,13 @@ public class DefaultManagementMetadataProvider implements ManagementMetadataProv } } + private String refinedStatusPath(String statusPath, String contextPath) { + if (statusPath.startsWith(contextPath) && !"/".equals(contextPath)) { + statusPath = StringUtils.replace(statusPath, contextPath, ""); + } + return StringUtils.trimLeadingCharacter(statusPath, '/'); + } + private String getErrorMessage(String scheme, String hostname, int port, String contextPath, String statusPath) { return String.format( diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 1c67d08e8..306b40eca 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -325,6 +325,20 @@ public class EurekaClientAutoConfigurationTests { .as("Wrong health check: " + instance.getHealthCheckUrl()).isTrue(); } + @Test + public void healthCheckUrlPathWithServerPortAndContextPathKebobCase() { + TestPropertyValues.of("server.port=8989", + "server.servlet.context-path=/servletContextPath", + "eureka.instance.health-check-url-path=${server.servlet.context-path:}/myHealthCheck") + .applyTo(this.context); + setupContext(RefreshAutoConfiguration.class); + EurekaInstanceConfigBean instance = this.context + .getBean(EurekaInstanceConfigBean.class); + assertThat(instance.getHealthCheckUrl()) + .as("Wrong health check: " + instance.getHealthCheckUrl()) + .endsWith(":8989/servletContextPath/myHealthCheck"); + } + @Test public void statusPageUrlPathAndManagementPortKabobCase() { TestPropertyValues