CAMEL-4974: Renamed option from sanitize to mask
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/64f5a86a Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/64f5a86a Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/64f5a86a Branch: refs/heads/master Commit: 64f5a86a1923f73b3a46c73216653b1c794bd863 Parents: d34b9c1 Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Aug 13 11:14:48 2013 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Aug 13 11:14:48 2013 +0200 ---------------------------------------------------------------------- .../camel/api/management/ManagedAttribute.java | 2 +- .../camel/api/management/ManagedOperation.java | 2 +- .../management/mbean/ManagedConsumerMBean.java | 2 +- .../management/mbean/ManagedEndpointMBean.java | 2 +- .../mbean/ManagedErrorHandlerMBean.java | 2 +- .../management/mbean/ManagedProducerMBean.java | 2 +- .../api/management/mbean/ManagedRouteMBean.java | 2 +- .../mbean/ManagedSendProcessorMBean.java | 2 +- .../management/DefaultManagementAgent.java | 14 +-- .../DefaultManagementMBeanAssembler.java | 4 +- .../DefaultManagementNamingStrategy.java | 3 +- .../camel/management/JmxSystemPropertyKeys.java | 2 +- .../camel/management/MBeanInfoAssembler.java | 34 +++---- .../management/MaskRequiredModelMBean.java | 95 ++++++++++++++++++++ .../management/SanitizeRequiredModelMBean.java | 94 ------------------- .../management/mbean/ManagedSendProcessor.java | 2 +- .../org/apache/camel/spi/ManagementAgent.java | 4 +- .../camel/management/ManagedSanitizeTest.java | 2 +- .../xml/AbstractCamelContextFactoryBean.java | 2 +- .../camel/core/xml/CamelJMXAgentDefinition.java | 14 +-- .../apache/camel/component/jms/JmsEndpoint.java | 2 +- .../management/SpringManagedSanitizeTest.xml | 4 +- .../component/zookeeper/ZooKeeperEndpoint.java | 2 +- 23 files changed, 147 insertions(+), 147 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/ManagedAttribute.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/ManagedAttribute.java b/camel-core/src/main/java/org/apache/camel/api/management/ManagedAttribute.java index 790ce5d..9f24f78 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/ManagedAttribute.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/ManagedAttribute.java @@ -34,6 +34,6 @@ public @interface ManagedAttribute { String description() default ""; - boolean sanitize() default false; + boolean mask() default false; } http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/ManagedOperation.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/ManagedOperation.java b/camel-core/src/main/java/org/apache/camel/api/management/ManagedOperation.java index 6a10c09..a5e5c69 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/ManagedOperation.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/ManagedOperation.java @@ -34,6 +34,6 @@ public @interface ManagedOperation { String description() default ""; - boolean sanitize() default false; + boolean mask() default false; } http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedConsumerMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedConsumerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedConsumerMBean.java index 24ee956..6aee218 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedConsumerMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedConsumerMBean.java @@ -20,7 +20,7 @@ import org.apache.camel.api.management.ManagedAttribute; public interface ManagedConsumerMBean extends ManagedServiceMBean { - @ManagedAttribute(description = "Endpoint URI", sanitize = true) + @ManagedAttribute(description = "Endpoint URI", mask = true) String getEndpointUri(); @ManagedAttribute(description = "Current number of inflight Exchanges") http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java index 1c82032..6b9c9b8 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java @@ -23,7 +23,7 @@ public interface ManagedEndpointMBean { @ManagedAttribute(description = "Camel ID") String getCamelId(); - @ManagedAttribute(description = "Endpoint URI", sanitize = true) + @ManagedAttribute(description = "Endpoint URI", mask = true) String getEndpointUri(); @ManagedAttribute(description = "Singleton") http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedErrorHandlerMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedErrorHandlerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedErrorHandlerMBean.java index 50b5ff1..9d0c95c 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedErrorHandlerMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedErrorHandlerMBean.java @@ -35,7 +35,7 @@ public interface ManagedErrorHandlerMBean { @ManagedAttribute(description = "Does this error handler support transactions") boolean isSupportTransactions(); - @ManagedAttribute(description = "Endpoint Uri for the dead letter channel where dead message is move to", sanitize = true) + @ManagedAttribute(description = "Endpoint Uri for the dead letter channel where dead message is move to", mask = true) String getDeadLetterChannelEndpointUri(); @ManagedAttribute(description = "RedeliveryPolicy for maximum redeliveries") http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProducerMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProducerMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProducerMBean.java index ad47f94..a35d533 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProducerMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedProducerMBean.java @@ -20,7 +20,7 @@ import org.apache.camel.api.management.ManagedAttribute; public interface ManagedProducerMBean extends ManagedServiceMBean { - @ManagedAttribute(description = "Endpoint URI", sanitize = true) + @ManagedAttribute(description = "Endpoint URI", mask = true) String getEndpointUri(); @ManagedAttribute(description = "Singleton") http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java index b945ce7..7f90e12 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java @@ -27,7 +27,7 @@ public interface ManagedRouteMBean extends ManagedPerformanceCounterMBean { @ManagedAttribute(description = "Route Description") String getDescription(); - @ManagedAttribute(description = "Route Endpoint URI", sanitize = true) + @ManagedAttribute(description = "Route Endpoint URI", mask = true) String getEndpointUri(); @ManagedAttribute(description = "Route State") http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java index 795c8a3..b164592 100644 --- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java +++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedSendProcessorMBean.java @@ -20,7 +20,7 @@ import org.apache.camel.api.management.ManagedAttribute; public interface ManagedSendProcessorMBean extends ManagedProcessorMBean { - @ManagedAttribute(description = "Destination as Endpoint URI", sanitize = true) + @ManagedAttribute(description = "Destination as Endpoint URI", mask = true) String getDestination(); /** http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 d2e57fb..d775b45 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,7 +76,7 @@ public class DefaultManagementAgent extends ServiceSupport implements Management private Boolean onlyRegisterProcessorWithCustomId; private Boolean registerAlways; private Boolean registerNewRoutes = true; - private Boolean sanitize; + private Boolean mask; public DefaultManagementAgent() { } @@ -120,8 +120,8 @@ 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); + if (System.getProperty(JmxSystemPropertyKeys.MASK) != null) { + mask = Boolean.getBoolean(JmxSystemPropertyKeys.MASK); } } @@ -213,12 +213,12 @@ public class DefaultManagementAgent extends ServiceSupport implements Management this.registerNewRoutes = registerNewRoutes; } - public Boolean getSanitize() { - return sanitize != null && sanitize; + public Boolean getMask() { + return mask != null && mask; } - public void setSanitize(Boolean sanitize) { - this.sanitize = sanitize; + public void setMask(Boolean mask) { + this.mask = mask; } public CamelContext getCamelContext() { http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java index b50b006..262b520 100644 --- a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java +++ b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementMBeanAssembler.java @@ -77,9 +77,9 @@ public class DefaultManagementMBeanAssembler implements ManagementMBeanAssembler } RequiredModelMBean mbean; - boolean sanitize = camelContext.getManagementStrategy().getManagementAgent().getSanitize() != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize(); + boolean sanitize = camelContext.getManagementStrategy().getManagementAgent().getMask() != null && camelContext.getManagementStrategy().getManagementAgent().getMask(); if (sanitize) { - mbean = new SanitizeRequiredModelMBean(mbi, sanitize); + mbean = new MaskRequiredModelMBean(mbi, sanitize); } else { mbean = (RequiredModelMBean) mBeanServer.instantiate(RequiredModelMBean.class.getName()); mbean.setModelMBeanInfo(mbi); http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 104103d..c2a45ad 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 @@ -36,7 +36,6 @@ 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; @@ -312,7 +311,7 @@ public class DefaultManagementNamingStrategy implements ManagementNamingStrategy protected String getEndpointId(Endpoint ep) { String answer = doGetEndpointId(ep); - Boolean sanitize = camelContext != null && camelContext.getManagementStrategy().getManagementAgent().getSanitize(); + Boolean sanitize = camelContext != null && camelContext.getManagementStrategy().getManagementAgent().getMask(); if (sanitize != null && sanitize) { // use xxxxxx as replacements as * has to be quoted for MBean names answer = URISupport.sanitizeUri(answer); http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 fc779fe..ac0a052 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 @@ -57,7 +57,7 @@ public final class JmxSystemPropertyKeys { 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"; + public static final String MASK = "org.apache.camel.jmx.mask"; private JmxSystemPropertyKeys() { // not instantiated http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/management/MBeanInfoAssembler.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/MBeanInfoAssembler.java b/camel-core/src/main/java/org/apache/camel/management/MBeanInfoAssembler.java index b74753a..56b5a14 100644 --- a/camel-core/src/main/java/org/apache/camel/management/MBeanInfoAssembler.java +++ b/camel-core/src/main/java/org/apache/camel/management/MBeanInfoAssembler.java @@ -202,7 +202,7 @@ public class MBeanInfoAssembler implements Service { String desc = ma.description(); Method getter = null; Method setter = null; - boolean sanitize = ma.sanitize(); + boolean mask = ma.mask(); if (cacheInfo.isGetter) { key = cacheInfo.getterOrSetterShorthandName; @@ -228,7 +228,7 @@ public class MBeanInfoAssembler implements Service { if (setter != null) { info.setSetter(setter); } - info.setSanitize(sanitize); + info.setMask(mask); attributes.put(key, info); } @@ -238,8 +238,8 @@ public class MBeanInfoAssembler implements Service { if (mo != null) { String desc = mo.description(); Method operation = cacheInfo.method; - boolean sanitize = mo.sanitize(); - operations.add(new ManagedOperationInfo(desc, operation, sanitize)); + boolean mask = mo.mask(); + operations.add(new ManagedOperationInfo(desc, operation, mask)); } } } @@ -253,13 +253,13 @@ public class MBeanInfoAssembler implements Service { // add missing attribute descriptors, this is needed to have attributes accessible Descriptor desc = mbeanAttribute.getDescriptor(); - desc.setField("sanitize", info.isSanitize() ? "true" : "false"); + desc.setField("mask", info.isMask() ? "true" : "false"); if (info.getGetter() != null) { desc.setField("getMethod", info.getGetter().getName()); // attribute must also be added as mbean operation ModelMBeanOperationInfo mbeanOperation = new ModelMBeanOperationInfo(info.getKey(), info.getGetter()); Descriptor opDesc = mbeanOperation.getDescriptor(); - opDesc.setField("sanitize", info.isSanitize() ? "true" : "false"); + opDesc.setField("mask", info.isMask() ? "true" : "false"); mbeanOperation.setDescriptor(opDesc); mBeanOperations.add(mbeanOperation); } @@ -280,7 +280,7 @@ public class MBeanInfoAssembler implements Service { for (ManagedOperationInfo info : operations) { ModelMBeanOperationInfo mbean = new ModelMBeanOperationInfo(info.getDescription(), info.getOperation()); Descriptor opDesc = mbean.getDescriptor(); - opDesc.setField("sanitize", info.isSanitize() ? "true" : "false"); + opDesc.setField("mask", info.isMask() ? "true" : "false"); mbean.setDescriptor(opDesc); mBeanOperations.add(mbean); LOG.trace("Assembled operation: {}", mbean); @@ -312,7 +312,7 @@ public class MBeanInfoAssembler implements Service { private String description; private Method getter; private Method setter; - private boolean sanitize; + private boolean mask; private ManagedAttributeInfo(String key, String description) { this.key = key; @@ -343,12 +343,12 @@ public class MBeanInfoAssembler implements Service { this.setter = setter; } - public boolean isSanitize() { - return sanitize; + public boolean isMask() { + return mask; } - public void setSanitize(boolean sanitize) { - this.sanitize = sanitize; + public void setMask(boolean mask) { + this.mask = mask; } @Override @@ -360,12 +360,12 @@ public class MBeanInfoAssembler implements Service { private static final class ManagedOperationInfo { private final String description; private final Method operation; - private final boolean sanitize; + private final boolean mask; - private ManagedOperationInfo(String description, Method operation, boolean sanitize) { + private ManagedOperationInfo(String description, Method operation, boolean mask) { this.description = description; this.operation = operation; - this.sanitize = sanitize; + this.mask = mask; } public String getDescription() { @@ -376,8 +376,8 @@ public class MBeanInfoAssembler implements Service { return operation; } - public boolean isSanitize() { - return sanitize; + public boolean isMask() { + return mask; } @Override http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/management/MaskRequiredModelMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/MaskRequiredModelMBean.java b/camel-core/src/main/java/org/apache/camel/management/MaskRequiredModelMBean.java new file mode 100644 index 0000000..697ed3e --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/management/MaskRequiredModelMBean.java @@ -0,0 +1,95 @@ +/** + * 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.Descriptor; +import javax.management.MBeanException; +import javax.management.MBeanOperationInfo; +import javax.management.ReflectionException; +import javax.management.RuntimeOperationsException; +import javax.management.modelmbean.ModelMBeanInfo; +import javax.management.modelmbean.RequiredModelMBean; + +import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.URISupport; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A {@link RequiredModelMBean} which allows us to intercept invoking operations on the MBean. + * <p/> + * For example if mask has been enabled on JMX, then we use this implementation + * to hide sensitive information from the returned JMX attributes / operations. + */ +public class MaskRequiredModelMBean extends RequiredModelMBean { + + private static final Logger LOG = LoggerFactory.getLogger(MaskRequiredModelMBean.class); + private boolean mask; + + public MaskRequiredModelMBean() throws MBeanException, RuntimeOperationsException { + // must have default no-arg constructor + } + + public MaskRequiredModelMBean(ModelMBeanInfo mbi, boolean mask) throws MBeanException, RuntimeOperationsException { + super(mbi); + this.mask = mask; + } + + public boolean isMask() { + return mask; + } + + @Override + public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException { + Object answer = super.invoke(opName, opArgs, sig); + // mask the answer if enabled and it was a String type (we cannot mask other types) + if (mask && answer instanceof String && ObjectHelper.isNotEmpty(answer) && isMaskOperation(opName)) { + answer = mask(opName, (String) answer); + } + return answer; + } + + protected boolean isMaskOperation(String opName) { + for (MBeanOperationInfo info : getMBeanInfo().getOperations()) { + if (info.getName().equals(opName)) { + Descriptor desc = info.getDescriptor(); + if (desc != null) { + Object val = desc.getFieldValue("mask"); + return val != null && "true".equals(val); + } + } + } + return false; + } + + /** + * Masks the returned value from invoking the operation + * + * @param opName the operation name invoked + * @param value the current value + * @return the masked value + */ + protected String mask(String opName, String value) { + // use sanitize uri which will mask sensitive information + String answer = URISupport.sanitizeUri(value); + if (LOG.isTraceEnabled()) { + LOG.trace("Masking JMX operation: {}.{} value: {} -> {}", + new Object[]{getMBeanInfo().getClassName(), opName, value, answer}); + } + return answer; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java b/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java deleted file mode 100644 index 6d34e75..0000000 --- a/camel-core/src/main/java/org/apache/camel/management/SanitizeRequiredModelMBean.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * 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.Descriptor; -import javax.management.MBeanException; -import javax.management.MBeanOperationInfo; -import javax.management.ReflectionException; -import javax.management.RuntimeOperationsException; -import javax.management.modelmbean.ModelMBeanInfo; -import javax.management.modelmbean.RequiredModelMBean; - -import org.apache.camel.util.ObjectHelper; -import org.apache.camel.util.URISupport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * A {@link RequiredModelMBean} which allows us to intercept invoking operations on the MBean. - * <p/> - * For example if sanitize has been enabled on JMX, then we use this implementation - * to hide sensitive information from the returned JMX attributes / operations. - */ -public class SanitizeRequiredModelMBean extends RequiredModelMBean { - - private static final Logger LOG = LoggerFactory.getLogger(SanitizeRequiredModelMBean.class); - private boolean sanitize; - - public SanitizeRequiredModelMBean() throws MBeanException, RuntimeOperationsException { - // must have default no-arg constructor - } - - public SanitizeRequiredModelMBean(ModelMBeanInfo mbi, boolean sanitize) throws MBeanException, RuntimeOperationsException { - super(mbi); - this.sanitize = sanitize; - } - - public boolean isSanitize() { - return sanitize; - } - - @Override - public Object invoke(String opName, Object[] opArgs, String[] sig) throws MBeanException, ReflectionException { - Object answer = super.invoke(opName, opArgs, sig); - // sanitize the answer if enabled and it was a String type (we cannot sanitize other types) - if (sanitize && answer instanceof String && ObjectHelper.isNotEmpty(answer) && isSanitizedOperation(opName)) { - answer = sanitize(opName, (String) answer); - } - return answer; - } - - protected boolean isSanitizedOperation(String opName) { - for (MBeanOperationInfo info : getMBeanInfo().getOperations()) { - if (info.getName().equals(opName)) { - Descriptor desc = info.getDescriptor(); - if (desc != null) { - Object val = desc.getFieldValue("sanitize"); - return val != null && "true".equals(val); - } - } - } - return false; - } - - /** - * Sanitizes the returned value from invoking the operation - * - * @param opName the operation name invoked - * @param value the current value - * @return the sanitized value - */ - protected String sanitize(String opName, String value) { - String answer = URISupport.sanitizeUri(value); - if (LOG.isTraceEnabled()) { - LOG.trace("Sanitizing JMX operation: {}.{} value: {} -> {}", - new Object[]{getMBeanInfo().getClassName(), opName, value, answer}); - } - return answer; - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 b824da8..43f74e7 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 @@ -39,7 +39,7 @@ public class ManagedSendProcessor extends ManagedProcessor implements ManagedSen public void init(ManagementStrategy strategy) { super.init(strategy); - boolean sanitize = strategy.getManagementAgent().getSanitize() != null ? strategy.getManagementAgent().getSanitize() : false; + boolean sanitize = strategy.getManagementAgent().getMask() != null ? strategy.getManagementAgent().getMask() : false; if (sanitize) { destination = URISupport.sanitizeUri(processor.getDestination().getEndpointUri()); } else { http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 4610beb..b0354c8 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 @@ -251,12 +251,12 @@ public interface ManagementAgent extends Service { * <p/> * This option is default <tt>false</tt>. */ - Boolean getSanitize(); + Boolean getMask(); /** * 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); + void setMask(Boolean sanitize); } http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 index c5d3710..7a1d07a 100644 --- a/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java +++ b/camel-core/src/test/java/org/apache/camel/management/ManagedSanitizeTest.java @@ -30,7 +30,7 @@ public class ManagedSanitizeTest extends ManagementTestSupport { @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); - context.getManagementStrategy().getManagementAgent().setSanitize(true); + context.getManagementStrategy().getManagementAgent().setMask(true); return context; } http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 f158d63..ac13f35 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 @@ -364,7 +364,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())); + agent.setMask(CamelContextHelper.parseBoolean(getContext(), camelJMXAgent.getMask())); ManagementStrategy managementStrategy = new ManagedManagementStrategy(getContext(), agent); getContext().setManagementStrategy(managementStrategy); http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 59da461..6d73c3c 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 @@ -115,7 +115,7 @@ public class CamelJMXAgentDefinition extends IdentifiedType { * A flag that indicates whether to remove detected sensitive information (such as passwords) from MBean names and attributes. */ @XmlAttribute - private String sanitize = "false"; + private String mask = "false"; public String getDisabled() { return disabled; @@ -221,12 +221,12 @@ public class CamelJMXAgentDefinition extends IdentifiedType { this.loadStatisticsEnabled = loadStatisticsEnabled; } - public String getSanitize() { - return sanitize; + public String getMask() { + return mask; } - public void setSanitize(String sanitize) { - this.sanitize = sanitize; + public void setMask(String mask) { + this.mask = mask; } @Override @@ -267,8 +267,8 @@ public class CamelJMXAgentDefinition extends IdentifiedType { if (registerNewRoutes != null) { sb.append(", registerNewRoutes=").append(registerNewRoutes); } - if (sanitize != null) { - sb.append(", sanitize=").append(sanitize); + if (mask != null) { + sb.append(", mask=").append(mask); } sb.append("]"); return sb.toString(); http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java index e8545fa..701de7c 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java @@ -1130,7 +1130,7 @@ public class JmsEndpoint extends DefaultEndpoint implements HeaderFilterStrategy return getCamelContext().getName(); } - @ManagedAttribute(description = "Endpoint Uri", sanitize = true) + @ManagedAttribute(description = "Endpoint Uri", mask = true) @Override public String getEndpointUri() { return super.getEndpointUri(); http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/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 index fecff5e..940e244 100644 --- 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 @@ -29,8 +29,8 @@ <!-- 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"/> + <!-- mask JMX so sensitive information such as passwords is not shown --> + <jmxAgent id="agent" mask="true"/> <route id="foo"> <from uri="direct:start"/> http://git-wip-us.apache.org/repos/asf/camel/blob/64f5a86a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java index 9832eff..5b74931 100644 --- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java +++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java @@ -66,7 +66,7 @@ public class ZooKeeperEndpoint extends DefaultEndpoint { return connectionManager; } - @ManagedAttribute(description = "Session Password", sanitize = true) + @ManagedAttribute(description = "Session Password", mask = true) public byte[] getSessionPassword() { return getConfiguration().getSessionPassword(); }