You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/07/29 11:04:15 UTC

[1/2] git commit: CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.

Updated Branches:
  refs/heads/master 9ad9245ce -> a874d23b2


CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a874d23b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a874d23b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a874d23b

Branch: refs/heads/master
Commit: a874d23b2b9d358107e7fc0ea6176c5c38e924cf
Parents: 3fd4c53
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Jul 29 10:22:42 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Jul 29 11:04:02 2013 +0200

----------------------------------------------------------------------
 .../DefaultManagementNamingStrategy.java        | 24 +++++++----
 .../management/DefaultManagementStrategy.java   |  7 +++-
 .../xml/AbstractCamelContextFactoryBean.java    |  1 +
 .../camel/core/xml/CamelJMXAgentDefinition.java | 20 +++++++++
 .../management/SpringManagedSanitizeTest.java   | 33 +++++++++++++++
 .../management/SpringManagedSanitizeTest.xml    | 43 ++++++++++++++++++++
 6 files changed, 119 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
index 0ff9758..9d22e8e 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
@@ -22,6 +22,7 @@ import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
@@ -45,7 +46,7 @@ import org.apache.camel.util.URISupport;
 /**
  * Naming strategy used when registering MBeans.
  */
-public class DefaultManagementNamingStrategy implements ManagementNamingStrategy {
+public class DefaultManagementNamingStrategy implements ManagementNamingStrategy, CamelContextAware {
     public static final String VALUE_UNKNOWN = "unknown";
     public static final String KEY_NAME = "name";
     public static final String KEY_TYPE = "type";
@@ -65,14 +66,14 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy
 
     protected String domainName;
     protected String hostName = "localhost";
-    protected final ManagementAgent managementAgent;
+    protected CamelContext camelContext;
 
-    public DefaultManagementNamingStrategy(ManagementAgent managementAgent) {
-        this(managementAgent, "org.apache.camel");
+    public DefaultManagementNamingStrategy() {
+        this("org.apache.camel");
+        // default constructor needed for <bean> style configuration
     }
 
-    public DefaultManagementNamingStrategy(ManagementAgent managementAgent, String domainName) {
-        this.managementAgent = managementAgent;
+    public DefaultManagementNamingStrategy(String domainName) {
         if (domainName != null) {
             this.domainName = domainName;
         }
@@ -83,6 +84,14 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy
         }
     }
 
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public ObjectName getObjectNameForCamelContext(String managementName, String name) throws MalformedObjectNameException {
         StringBuilder buffer = new StringBuilder();
         buffer.append(domainName).append(":");
@@ -303,7 +312,8 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy
 
     protected String getEndpointId(Endpoint ep) {
         String answer = doGetEndpointId(ep);
-        if (managementAgent.getSanitize() != null && managementAgent.getSanitize()) {
+        Boolean sanitize = camelContext != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize();
+        if (sanitize != null && sanitize) {
             // use xxxxxx as replacements as * has to be quoted for MBean names
             answer = URISupport.sanitizeUri(answer, "xxxxxx");
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index e0c9726..f71f9ba 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -93,7 +93,7 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
 
     public ManagementNamingStrategy getManagementNamingStrategy() {
         if (managementNamingStrategy == null) {
-            managementNamingStrategy = new DefaultManagementNamingStrategy(getManagementAgent());
+            managementNamingStrategy = new DefaultManagementNamingStrategy();
         }
         return managementNamingStrategy;
     }
@@ -218,9 +218,12 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
             managementAgent.start();
             // set the naming strategy using the domain name from the agent
             if (managementNamingStrategy == null) {
-                setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent, managementAgent.getMBeanObjectDomainName()));
+                setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent.getMBeanObjectDomainName()));
             }
         }
+        if (managementNamingStrategy instanceof CamelContextAware) {
+            ((CamelContextAware) managementNamingStrategy).setCamelContext(getCamelContext());
+        }
     }
 
     public void stop() throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index df369a5..05e6568 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -365,6 +365,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             agent.setOnlyRegisterProcessorWithCustomId(CamelContextHelper.parseBoolean(getContext(), camelJMXAgent.getOnlyRegisterProcessorWithCustomId()));
             agent.setRegisterAlways(CamelContextHelper.parseBoolean(getContext(), camelJMXAgent.getRegisterAlways()));
             agent.setRegisterNewRoutes(CamelContextHelper.parseBoolean(getContext(), camelJMXAgent.getRegisterNewRoutes()));
+            agent.setSanitize(CamelContextHelper.parseBoolean(getContext(), camelJMXAgent.getSanitize()));
 
             ManagementStrategy managementStrategy = new ManagedManagementStrategy(getContext(), agent);
             getContext().setManagementStrategy(managementStrategy);

http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
----------------------------------------------------------------------
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
index bde0ec6..59da461 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelJMXAgentDefinition.java
@@ -111,6 +111,12 @@ public class CamelJMXAgentDefinition extends IdentifiedType {
     @XmlAttribute
     private String loadStatisticsEnabled;
 
+    /**
+     * A flag that indicates whether to remove detected sensitive information (such as passwords) from MBean names and attributes.
+     */
+    @XmlAttribute
+    private String sanitize = "false";
+
     public String getDisabled() {
         return disabled;
     }
@@ -215,6 +221,14 @@ public class CamelJMXAgentDefinition extends IdentifiedType {
         this.loadStatisticsEnabled = loadStatisticsEnabled;
     }
 
+    public String getSanitize() {
+        return sanitize;
+    }
+
+    public void setSanitize(String sanitize) {
+        this.sanitize = sanitize;
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
@@ -244,12 +258,18 @@ public class CamelJMXAgentDefinition extends IdentifiedType {
         if (loadStatisticsEnabled != null) {
             sb.append(", loadStatisticsEnabled=").append(loadStatisticsEnabled);
         }
+        if (onlyRegisterProcessorWithCustomId != null) {
+            sb.append(", onlyRegisterProcessorWithCustomId=").append(onlyRegisterProcessorWithCustomId);
+        }
         if (registerAlways != null) {
             sb.append(", registerAlways=").append(registerAlways);
         }
         if (registerNewRoutes != null) {
             sb.append(", registerNewRoutes=").append(registerNewRoutes);
         }
+        if (sanitize != null) {
+            sb.append(", sanitize=").append(sanitize);
+        }
         sb.append("]");
         return sb.toString();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSanitizeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSanitizeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSanitizeTest.java
new file mode 100644
index 0000000..e3b588c
--- /dev/null
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedSanitizeTest.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.management;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.management.ManagedSanitizeTest;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+/**
+ * @version 
+ */
+public class SpringManagedSanitizeTest extends ManagedSanitizeTest {
+
+    protected CamelContext createCamelContext() throws Exception {
+        return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringManagedSanitizeTest.xml");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/a874d23b/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSanitizeTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSanitizeTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSanitizeTest.xml
new file mode 100644
index 0000000..c8e3894
--- /dev/null
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/management/SpringManagedSanitizeTest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+    ">
+
+  <bean id="naming" class="org.apache.camel.management.DefaultManagementNamingStrategy">
+    <property name="hostName" value="localhost"/>
+    <property name="domainName" value="org.apache.camel"/>
+  </bean>
+
+  <!-- START SNIPPET: example -->
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+    <!-- sanitize JMX so sensitive information such as passwords is not shown -->
+    <jmxAgent id="agent" sanitize="true"/>
+
+    <route id="foo">
+      <from uri="direct:start"/>
+      <to uri="stub:foo?username=foo&amp;password=secret"/>
+      <to uri="mock:result"/>
+    </route>
+  </camelContext>
+  <!-- END SNIPPET: example -->
+
+</beans>


[2/2] git commit: CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.

Posted by da...@apache.org.
CAMEL-4974: Added santizie option to JMX to hide sensitive information like password in URIs exposed in JMX MBean names and attributes.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3fd4c53a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3fd4c53a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3fd4c53a

Branch: refs/heads/master
Commit: 3fd4c53ad9604c83f66015837f154fa6c995b7b7
Parents: 9ad9245
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Jul 29 08:10:10 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Jul 29 11:04:02 2013 +0200

----------------------------------------------------------------------
 .../management/DefaultManagementAgent.java      | 12 ++++
 .../DefaultManagementNamingStrategy.java        | 19 ++++++-
 .../management/DefaultManagementStrategy.java   |  4 +-
 .../camel/management/JmxSystemPropertyKeys.java |  3 +
 .../camel/management/mbean/ManagedConsumer.java | 16 +++++-
 .../camel/management/mbean/ManagedEndpoint.java | 11 +++-
 .../camel/management/mbean/ManagedProducer.java | 16 +++++-
 .../camel/management/mbean/ManagedRoute.java    | 24 +++++++-
 .../management/mbean/ManagedSendProcessor.java  | 15 ++++-
 .../org/apache/camel/spi/ManagementAgent.java   | 13 +++++
 .../java/org/apache/camel/util/URISupport.java  | 20 ++++++-
 .../camel/management/ManagedSanitizeTest.java   | 59 ++++++++++++++++++++
 12 files changed, 197 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
index ad44b11..d2e57fb 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementAgent.java
@@ -76,6 +76,7 @@ public class DefaultManagementAgent extends ServiceSupport implements Management
     private Boolean onlyRegisterProcessorWithCustomId;
     private Boolean registerAlways;
     private Boolean registerNewRoutes = true;
+    private Boolean sanitize;
 
     public DefaultManagementAgent() {
     }
@@ -119,6 +120,9 @@ public class DefaultManagementAgent extends ServiceSupport implements Management
         if (System.getProperty(JmxSystemPropertyKeys.REGISTER_NEW_ROUTES) != null) {
             registerNewRoutes = Boolean.getBoolean(JmxSystemPropertyKeys.REGISTER_NEW_ROUTES);
         }
+        if (System.getProperty(JmxSystemPropertyKeys.SANITIZE) != null) {
+            sanitize = Boolean.getBoolean(JmxSystemPropertyKeys.SANITIZE);
+        }
     }
 
     public void setRegistryPort(Integer port) {
@@ -209,6 +213,14 @@ public class DefaultManagementAgent extends ServiceSupport implements Management
         this.registerNewRoutes = registerNewRoutes;
     }
 
+    public Boolean getSanitize() {
+        return sanitize != null && sanitize;
+    }
+
+    public void setSanitize(Boolean sanitize) {
+        this.sanitize = sanitize;
+    }
+
     public CamelContext getCamelContext() {
         return camelContext;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
index 18fe1a6..0ff9758 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementNamingStrategy.java
@@ -35,10 +35,12 @@ import org.apache.camel.StaticService;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.ManagementAgent;
 import org.apache.camel.spi.ManagementNamingStrategy;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.InetAddressUtil;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
 
 /**
  * Naming strategy used when registering MBeans.
@@ -63,12 +65,14 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy
 
     protected String domainName;
     protected String hostName = "localhost";
+    protected final ManagementAgent managementAgent;
 
-    public DefaultManagementNamingStrategy() {
-        this("org.apache.camel");
+    public DefaultManagementNamingStrategy(ManagementAgent managementAgent) {
+        this(managementAgent, "org.apache.camel");
     }
 
-    public DefaultManagementNamingStrategy(String domainName) {
+    public DefaultManagementNamingStrategy(ManagementAgent managementAgent, String domainName) {
+        this.managementAgent = managementAgent;
         if (domainName != null) {
             this.domainName = domainName;
         }
@@ -298,6 +302,15 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy
     }
 
     protected String getEndpointId(Endpoint ep) {
+        String answer = doGetEndpointId(ep);
+        if (managementAgent.getSanitize() != null && managementAgent.getSanitize()) {
+            // use xxxxxx as replacements as * has to be quoted for MBean names
+            answer = URISupport.sanitizeUri(answer, "xxxxxx");
+        }
+        return answer;
+    }
+
+    private String doGetEndpointId(Endpoint ep) {
         if (ep.isSingleton()) {
             return ep.getEndpointKey();
         } else {

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
index aa7bfcf..e0c9726 100644
--- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java
@@ -93,7 +93,7 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
 
     public ManagementNamingStrategy getManagementNamingStrategy() {
         if (managementNamingStrategy == null) {
-            managementNamingStrategy = new DefaultManagementNamingStrategy();
+            managementNamingStrategy = new DefaultManagementNamingStrategy(getManagementAgent());
         }
         return managementNamingStrategy;
     }
@@ -218,7 +218,7 @@ public class DefaultManagementStrategy implements ManagementStrategy, CamelConte
             managementAgent.start();
             // set the naming strategy using the domain name from the agent
             if (managementNamingStrategy == null) {
-                setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent.getMBeanObjectDomainName()));
+                setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent, managementAgent.getMBeanObjectDomainName()));
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/JmxSystemPropertyKeys.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/JmxSystemPropertyKeys.java b/camel-core/src/main/java/org/apache/camel/management/JmxSystemPropertyKeys.java
index f437c5d..fc779fe 100644
--- a/camel-core/src/main/java/org/apache/camel/management/JmxSystemPropertyKeys.java
+++ b/camel-core/src/main/java/org/apache/camel/management/JmxSystemPropertyKeys.java
@@ -56,6 +56,9 @@ public final class JmxSystemPropertyKeys {
     // whether to register when starting new routes
     public static final String REGISTER_NEW_ROUTES = "org.apache.camel.jmx.registerNewRoutes";
 
+    // Whether to remove detected sensitive information (such as passwords) from MBean names and attributes.
+    public static final String SANITIZE = "org.apache.camel.jmx.sanitize";
+
     private JmxSystemPropertyKeys() {
         // not instantiated
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
index bcc9967..908fe19 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedConsumer.java
@@ -20,6 +20,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedConsumerMBean;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
@@ -27,18 +29,30 @@ import org.apache.camel.api.management.mbean.ManagedConsumerMBean;
 @ManagedResource(description = "Managed Consumer")
 public class ManagedConsumer extends ManagedService implements ManagedConsumerMBean {
     private final Consumer consumer;
+    private String uri;
 
     public ManagedConsumer(CamelContext context, Consumer consumer) {
         super(context, consumer);
         this.consumer = consumer;
     }
 
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false;
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(consumer.getEndpoint().getEndpointUri(), "xxxxxx");
+        } else {
+            uri = consumer.getEndpoint().getEndpointUri();
+        }
+    }
+
     public Consumer getConsumer() {
         return consumer;
     }
 
     public String getEndpointUri() {
-        return consumer.getEndpoint().getEndpointUri();
+        return uri;
     }
 
     public Integer getInflightExchanges() {

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
index a501061..e12f93d 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
@@ -23,17 +23,24 @@ import org.apache.camel.api.management.ManagedInstance;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedEndpointMBean;
 import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 @ManagedResource(description = "Managed Endpoint")
 public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean {
     private final Endpoint endpoint;
+    private String uri;
 
     public ManagedEndpoint(Endpoint endpoint) {
         this.endpoint = endpoint;
     }
 
     public void init(ManagementStrategy strategy) {
-        // do nothing
+        boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false;
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(endpoint.getEndpointUri(), "xxxxxx");
+        } else {
+            uri = endpoint.getEndpointUri();
+        }
     }
 
     public Endpoint getEndpoint() {
@@ -47,7 +54,7 @@ public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean {
 
     @Override
     public String getEndpointUri() {
-        return endpoint.getEndpointUri();
+        return uri;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProducer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProducer.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProducer.java
index da77e2c..e0e1373 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProducer.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedProducer.java
@@ -20,6 +20,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedProducerMBean;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
@@ -27,18 +29,30 @@ import org.apache.camel.api.management.mbean.ManagedProducerMBean;
 @ManagedResource(description = "Managed Producer")
 public class ManagedProducer extends ManagedService implements ManagedProducerMBean {
     private final Producer producer;
+    private String uri;
 
     public ManagedProducer(CamelContext context, Producer producer) {
         super(context, producer);
         this.producer = producer;
     }
 
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false;
+        if (sanitize) {
+            uri = URISupport.sanitizeUri(producer.getEndpoint().getEndpointUri(), "xxxxxx");
+        } else {
+            uri = producer.getEndpoint().getEndpointUri();
+        }
+    }
+
     public Producer getProducer() {
         return producer;
     }
 
     public String getEndpointUri() {
-        return producer.getEndpoint().getEndpointUri();
+        return uri;
     }
 
     public boolean isSingleton() {

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 768b631..d3c2927 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -44,8 +44,10 @@ import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.URISupport;
 
 @ManagedResource(description = "Managed Route")
 public class ManagedRoute extends ManagedPerformanceCounter implements TimerListener, ManagedRouteMBean {
@@ -54,6 +56,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     protected final String description;
     protected final ModelCamelContext context;
     private final LoadTriplet load = new LoadTriplet();
+    private String endpointUri;
 
     public ManagedRoute(ModelCamelContext context, Route route) {
         this.route = route;
@@ -63,6 +66,24 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
         setStatisticsEnabled(enabled);
     }
 
+    @Override
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+
+        Endpoint ep = route.getEndpoint();
+        if (ep != null) {
+            String uri = ep.getEndpointUri();
+            boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false;
+            if (sanitize) {
+                endpointUri = URISupport.sanitizeUri(uri, "xxxxxx");
+            } else {
+                endpointUri = uri;
+            }
+        } else {
+            endpointUri = VALUE_UNKNOWN;
+        }
+    }
+
     public Route getRoute() {
         return route;
     }
@@ -84,8 +105,7 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
     }
 
     public String getEndpointUri() {
-        Endpoint ep = route.getEndpoint();
-        return ep != null ? ep.getEndpointUri() : VALUE_UNKNOWN;
+        return endpointUri;
     }
 
     public String getState() {

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
index 668d963..de04f43 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedSendProcessor.java
@@ -21,6 +21,8 @@ import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedSendProcessorMBean;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.SendProcessor;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.util.URISupport;
 
 /**
  * @version 
@@ -28,18 +30,29 @@ import org.apache.camel.processor.SendProcessor;
 @ManagedResource(description = "Managed SendProcessor")
 public class ManagedSendProcessor extends ManagedProcessor implements ManagedSendProcessorMBean {
     private final SendProcessor processor;
+    private String destination;
 
     public ManagedSendProcessor(CamelContext context, SendProcessor processor, ProcessorDefinition<?> definition) {
         super(context, processor, definition);
         this.processor = processor;
     }
 
+    public void init(ManagementStrategy strategy) {
+        super.init(strategy);
+        boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false;
+        if (sanitize) {
+            destination = URISupport.sanitizeUri(processor.getDestination().getEndpointUri(), "xxxxxx");
+        } else {
+            destination = processor.getDestination().getEndpointUri();
+        }
+    }
+
     public SendProcessor getProcessor() {
         return processor;
     }
 
     public String getDestination() {
-        return processor.getDestination().getEndpointUri();
+        return destination;
     }
 
     public void setDestination(String uri) {

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java b/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
index f4b41cc..4610beb 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/ManagementAgent.java
@@ -246,4 +246,17 @@ public interface ManagementAgent extends Service {
      */
     void setRegisterNewRoutes(Boolean registerNewRoutes);
 
+    /**
+     * Whether to remove detected sensitive information (such as passwords) from MBean names and attributes.
+     * <p/>
+     * This option is default <tt>false</tt>.
+     */
+    Boolean getSanitize();
+
+    /**
+     * Whether to remove detected sensitive information (such as passwords) from MBean names and attributes.
+     * <p/>
+     * This option is default <tt>false</tt>.
+     */
+    void setSanitize(Boolean sanitize);
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/main/java/org/apache/camel/util/URISupport.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/URISupport.java b/camel-core/src/main/java/org/apache/camel/util/URISupport.java
index 47eb76d..92a8401 100644
--- a/camel-core/src/main/java/org/apache/camel/util/URISupport.java
+++ b/camel-core/src/main/java/org/apache/camel/util/URISupport.java
@@ -61,20 +61,34 @@ public final class URISupport {
 
     /**
      * Removes detected sensitive information (such as passwords) from the URI and returns the result.
+     *
      * @param uri The uri to sanitize.
      * @see #SECRETS for the matched pattern
      *
      * @return Returns null if the uri is null, otherwise the URI with the passphrase, password or secretKey sanitized.
      */
     public static String sanitizeUri(String uri) {
+        return sanitizeUri(uri, "******");
+    }
+    
+    /**
+     * Removes detected sensitive information (such as passwords) from the URI and returns the result.
+     *
+     * @param uri The uri to sanitize.
+     * @param replacement the masked replacement
+     * @see #SECRETS for the matched pattern
+     *
+     * @return Returns null if the uri is null, otherwise the URI with the passphrase, password or secretKey sanitized.
+     */
+    public static String sanitizeUri(String uri, String replacement) {
         String sanitized = uri;
         if (uri != null) {
-            sanitized = SECRETS.matcher(sanitized).replaceAll("$1=******");
-            sanitized = USERINFO_PASSWORD.matcher(sanitized).replaceFirst("$1******$3");
+            sanitized = SECRETS.matcher(sanitized).replaceAll("$1=" + replacement);
+            sanitized = USERINFO_PASSWORD.matcher(sanitized).replaceFirst("$1" + replacement + "$3");
         }
         return sanitized;
     }
-    
+
     /**
      * Removes detected sensitive information (such as passwords) from the
      * <em>path part</em> of an URI (that is, the part without the query

http://git-wip-us.apache.org/repos/asf/camel/blob/3fd4c53a/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java b/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java
new file mode 100644
index 0000000..c842b75
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java
@@ -0,0 +1,59 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.management;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version 
+ */
+public class ManagedSanitizeTest extends ManagementTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+        context.getManagementStrategy().getManagementAgent().setSanitize(true);
+        return context;
+    }
+
+    public void testSanitize() throws Exception {
+        MBeanServer mbeanServer = getMBeanServer();
+
+        ObjectName name = ObjectName.getInstance("org.apache.camel:context=localhost/camel-1,type=endpoints,name=\"stub://foo\\?password=xxxxxx&username=foo\"");
+        assertTrue("Should be registered", mbeanServer.isRegistered(name));
+        // TODO: fix browsable endpoint mbean
+        // String uri = (String) mbeanServer.getAttribute(name, "EndpointUri");
+        // assertEquals("stub://foo?password=xxxxxx&username=foo", uri);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").routeId("foo")
+                    .to("stub:foo?username=foo&password=secret")
+                    .to("mock:result");
+            }
+        };
+    }
+
+}