diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java index 792844a7..9950ac03 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java @@ -75,6 +75,7 @@ public class EurekaController { } model.put("statusInfo", statusInfo); populateInstanceInfo(model, statusInfo); + filterReplicas(model, statusInfo); return "eureka/status"; } @@ -148,7 +149,7 @@ public class EurekaController { for (PeerEurekaNode node : list) { try { URI uri = new URI(node.getServiceUrl()); - String href = node.getServiceUrl(); + String href = scrubBasicAuth(node.getServiceUrl()); replicas.put(uri.getHost(), href); } catch (Exception ex) { @@ -267,4 +268,31 @@ public class EurekaController { } model.put("instanceInfo", instanceMap); } + + protected void filterReplicas(Map model, StatusInfo statusInfo) { + Map applicationStats = statusInfo.getApplicationStats(); + if(applicationStats.get("registered-replicas").contains("@")){ + applicationStats.put("registered-replicas", scrubBasicAuth(applicationStats.get("registered-replicas"))); + } + if(applicationStats.get("unavailable-replicas").contains("@")){ + applicationStats.put("unavailable-replicas",scrubBasicAuth(applicationStats.get("unavailable-replicas"))); + } + if(applicationStats.get("available-replicas").contains("@")){ + applicationStats.put("available-replicas",scrubBasicAuth(applicationStats.get("available-replicas"))); + } + model.put("applicationStats", applicationStats); + } + + private String scrubBasicAuth(String urlList){ + String[] urls=urlList.split(","); + String filteredUrls=""; + for(String u : urls){ + if(u.contains("@")){ + filteredUrls+=u.substring(0,u.indexOf("//")+2)+u.substring(u.indexOf("@")+1,u.length())+","; + }else{ + filteredUrls+=u+","; + } + } + return filteredUrls.substring(0,filteredUrls.length()-1); + } } diff --git a/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaControllerReplicasTest.java b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaControllerReplicasTest.java new file mode 100644 index 00000000..012b8846 --- /dev/null +++ b/spring-cloud-netflix-eureka-server/src/test/java/org/springframework/cloud/netflix/eureka/server/EurekaControllerReplicasTest.java @@ -0,0 +1,64 @@ +package org.springframework.cloud.netflix.eureka.server; + +import static org.junit.Assert.*; + +import java.util.HashMap; +import java.util.Map; + + +import org.junit.Test; + +import com.netflix.eureka.util.StatusInfo; + + +public class EurekaControllerReplicasTest { + + String noAuthList1 = "http://test1.com"; + String noAuthList2 = noAuthList1+",http://test2.com"; + + String authList1 = "http://user:pwd@test1.com"; + String authList2 = authList1+",http://user2:pwd2@test2.com"; + + String empty = new String(); + + @Test + public void testFilterReplicasNoAuth() throws Exception { + Map model=new HashMap(); + StatusInfo statusInfo = StatusInfo.Builder.newBuilder(). + add("registered-replicas", empty). + add("available-replicas",noAuthList1). + add("unavailable-replicas",noAuthList2). + build(); + EurekaController controller = new EurekaController(null); + + controller.filterReplicas(model,statusInfo); + + @SuppressWarnings("unchecked") + Map results = (Map) model.get("applicationStats"); + assertEquals(empty,results.get("registered-replicas")); + assertEquals(noAuthList1,results.get("available-replicas")); + assertEquals(noAuthList2,results.get("unavailable-replicas")); + + } + + @Test + public void testFilterReplicasAuth() throws Exception { + Map model=new HashMap(); + StatusInfo statusInfo = StatusInfo.Builder.newBuilder(). + add("registered-replicas", authList2). + add("available-replicas",authList1). + add("unavailable-replicas",empty). + build(); + EurekaController controller = new EurekaController(null); + + controller.filterReplicas(model,statusInfo); + + @SuppressWarnings("unchecked") + Map results = (Map) model.get("applicationStats"); + assertEquals(empty,results.get("unavailable-replicas")); + assertEquals(noAuthList1,results.get("available-replicas")); + assertEquals(noAuthList2,results.get("registered-replicas")); + + } + +}