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&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");
+ }
+ };
+ }
+
+}