This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new a49687c CAMEL-15648: Avoid reflection to clear exchange headers in DigitalSignatureProcessor a49687c is described below commit a49687cb8c40f39e8973bc9f449e27f1359a4200 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Wed Oct 7 12:18:03 2020 +0100 CAMEL-15648: Avoid reflection to clear exchange headers in DigitalSignatureProcessor --- .../processor/DigitalSignatureProcessor.java | 8 +- .../crypto/processor/SigningProcessorTest.java | 93 ++++++++++++++++++++++ 2 files changed, 94 insertions(+), 7 deletions(-) diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java index 01a91ea..8eeed1a 100644 --- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java +++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java @@ -17,12 +17,10 @@ package org.apache.camel.component.crypto.processor; import java.io.InputStream; -import java.lang.reflect.Field; import java.security.KeyStore; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Signature; -import java.util.Map; import org.apache.camel.Exchange; import org.apache.camel.Message; @@ -31,7 +29,6 @@ import org.apache.camel.component.crypto.DigitalSignatureConfiguration; import org.apache.camel.component.crypto.DigitalSignatureConstants; import org.apache.camel.support.ExchangeHelper; import org.apache.camel.util.IOHelper; -import org.apache.camel.util.ObjectHelper; public abstract class DigitalSignatureProcessor implements Processor { @@ -87,10 +84,7 @@ public abstract class DigitalSignatureProcessor implements Processor { protected void clearMessageHeaders(Message in) { if (config.isClearHeaders()) { - Map<String, Object> headers = in.getHeaders(); - for (Field f : DigitalSignatureConstants.class.getFields()) { - headers.remove(ObjectHelper.lookupConstantFieldValue(DigitalSignatureConstants.class, f.getName())); - } + in.removeHeaders("^Camel(Digital)?Signature.*"); } } } diff --git a/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/processor/SigningProcessorTest.java b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/processor/SigningProcessorTest.java new file mode 100644 index 0000000..2bcfe74 --- /dev/null +++ b/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/processor/SigningProcessorTest.java @@ -0,0 +1,93 @@ +/* + * 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.component.crypto.processor; + +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.component.crypto.DigitalSignatureConfiguration; +import org.apache.camel.component.crypto.DigitalSignatureConstants; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.support.DefaultExchange; +import org.apache.camel.support.DefaultMessage; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SigningProcessorTest { + + @Test + public void testClearHeadersEnabled() { + DigitalSignatureConfiguration configuration = new DigitalSignatureConfiguration(); + configuration.setClearHeaders(true); + + DigitalSignatureProcessor processor = new DigitalSignatureProcessor(configuration) { + @Override + public void process(Exchange exchange) throws Exception { + // Noop + } + }; + + Exchange exchange = new DefaultExchange(new DefaultCamelContext()); + Message message = new DefaultMessage(exchange); + message.setHeader(DigitalSignatureConstants.SIGNATURE, "test-signature"); + message.setHeader(DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, "test-signature-private-key"); + message.setHeader(DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, "test-public-key-or-cert"); + message.setHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, "test-alias"); + message.setHeader(DigitalSignatureConstants.KEYSTORE_PASSWORD, "test-password"); + message.setHeader("CamelFooHeader", "bar"); + message.setHeader("CamelCheeseHeader", "wine"); + message.setHeader("custom", "test"); + + processor.clearMessageHeaders(message); + + // Verify all of the crypto headers were removed but the others remain + Map<String, Object> headers = message.getHeaders(); + assertEquals(3, headers.size()); + assertTrue(headers.containsKey("CamelFooHeader")); + assertTrue(headers.containsKey("CamelCheeseHeader")); + assertTrue(headers.containsKey("custom")); + } + + @Test + public void testClearHeadersDisabled() { + DigitalSignatureConfiguration configuration = new DigitalSignatureConfiguration(); + configuration.setClearHeaders(false); + + DigitalSignatureProcessor processor = new DigitalSignatureProcessor(configuration) { + @Override + public void process(Exchange exchange) throws Exception { + // Noop + } + }; + + Exchange exchange = new DefaultExchange(new DefaultCamelContext()); + Message message = new DefaultMessage(exchange); + message.setHeader(DigitalSignatureConstants.SIGNATURE, "test-signature"); + message.setHeader(DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, "test-signature-private-key"); + message.setHeader(DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, "test-public-key-or-cert"); + message.setHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, "test-alias"); + message.setHeader(DigitalSignatureConstants.KEYSTORE_PASSWORD, "test-password"); + + processor.clearMessageHeaders(message); + + Map<String, Object> headers = message.getHeaders(); + assertEquals(5, headers.size()); + } +}