From b99faba3cdcffbc21bb1c536c8bd4af5c6de7cb4 Mon Sep 17 00:00:00 2001 From: darkius <134155+darkius@users.noreply.github.com> Date: Tue, 13 Mar 2018 15:23:47 +0200 Subject: [PATCH] Fix management context path in URL (#2702) (#2769) --- .../DefaultManagementMetadataProvider.java | 7 ++++++- .../DefaultManagementMetadataProviderTest.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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 def4de3cc..2dc5c623f 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 @@ -71,6 +71,10 @@ public class DefaultManagementMetadataProvider implements ManagementMetadataProv private String refineManagementContextPath(String serverContextPath, String managementContextPath, Integer managementPort) { + // management context path is relative to server context path when no management port is set + if (managementContextPath != null && managementPort == null) { + return serverContextPath + managementContextPath; + } if(managementContextPath != null) { return managementContextPath; } @@ -86,7 +90,8 @@ public class DefaultManagementMetadataProvider implements ManagementMetadataProv if (!contextPath.endsWith("/")) { contextPath = contextPath + "/"; } - URL base = new URL(scheme, hostname, port, contextPath); + String refinedContextPath = '/' + StringUtils.trimLeadingCharacter(contextPath, '/') ; + URL base = new URL(scheme, hostname, port, refinedContextPath); String refinedStatusPath = StringUtils.trimLeadingCharacter(statusPath, '/'); return new URL(base, refinedStatusPath).toString(); } catch (MalformedURLException e) { diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java index 9b2d27eb9..50739b10d 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/metadata/DefaultManagementMetadataProviderTest.java @@ -108,6 +108,20 @@ public class DefaultManagementMetadataProviderTest { Integer managementPort = null; ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:7777/Server/Management/health"); + assertThat(actual.getSecureHealthCheckUrl()).isNullOrEmpty(); + assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:7777/Server/Management/info"); + assertThat(actual.getManagementPort()).isEqualTo(7777); + } + + @Test + public void serverPortManagementContextPath() throws Exception { + int serverPort = 7777; + String serverContextPath = "/"; + String managementContextPath = "/Management"; + Integer managementPort = null; + ManagementMetadata actual = provider.get(INSTANCE, serverPort, serverContextPath, managementContextPath, managementPort); + assertThat(actual.getHealthCheckUrl()).isEqualTo("http://host:7777/Management/health"); assertThat(actual.getSecureHealthCheckUrl()).isNullOrEmpty(); assertThat(actual.getStatusPageUrl()).isEqualTo("http://host:7777/Management/info");