You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ha...@apache.org on 2012/02/09 04:39:21 UTC
svn commit: r1242214 - in /camel/trunk/components/camel-crypto/src:
main/java/org/apache/camel/component/crypto/
main/java/org/apache/camel/component/crypto/processor/
test/java/org/apache/camel/component/crypto/
test/resources/org/apache/camel/compone...
Author: hadrian
Date: Thu Feb 9 03:39:20 2012
New Revision: 1242214
URL: http://svn.apache.org/viewvc?rev=1242214&view=rev
Log:
CAMEL-4996. Fix clearHeaders option in camel-crypto
Modified:
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConfiguration.java Thu Feb 9 03:39:20 2012
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.RuntimeCamelException;
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE;
public class DigitalSignatureConfiguration implements Cloneable, CamelContextAware {
@@ -50,7 +49,7 @@ public class DigitalSignatureConfigurati
private String privateKeyName;
private String keystoreName;
private String randomName;
- private boolean clearHeaders;
+ private boolean clearHeaders = true;
private String operation;
public DigitalSignatureConfiguration copy() {
@@ -367,7 +366,7 @@ public class DigitalSignatureConfigurati
* base64 encoded signature. This defaults to 'CamelDigitalSignature'
*/
public String getSignatureHeader() {
- return signatureHeaderName != null ? signatureHeaderName : SIGNATURE;
+ return signatureHeaderName != null ? signatureHeaderName : DigitalSignatureConstants.SIGNATURE;
}
/**
Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureConstants.java Thu Feb 9 03:39:20 2012
@@ -20,11 +20,11 @@ package org.apache.camel.component.crypt
* <code>DigitalSignatureConstants</code> contains Constants for use as Message
* header keys.
*/
-public interface DigitalSignatureConstants {
+public final class DigitalSignatureConstants {
- String SIGNATURE_PRIVATE_KEY = "CamelSignaturePrivateKey";
- String SIGNATURE_PUBLIC_KEY_OR_CERT = "CamelSignaturePublicKeyOrCert";
- String SIGNATURE = "CamelDigitalSignature";
- String KEYSTORE_ALIAS = "CamelSignatureKeyStoreAlias";
- String KEYSTORE_PASSWORD = "CamelSignatureKeyStorePassword";
+ public static final String SIGNATURE_PRIVATE_KEY = "CamelSignaturePrivateKey";
+ public static final String SIGNATURE_PUBLIC_KEY_OR_CERT = "CamelSignaturePublicKeyOrCert";
+ public static final String SIGNATURE = "CamelDigitalSignature";
+ public static final String KEYSTORE_ALIAS = "CamelSignatureKeyStoreAlias";
+ public static final String KEYSTORE_PASSWORD = "CamelSignatureKeyStorePassword";
}
Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java Thu Feb 9 03:39:20 2012
@@ -30,8 +30,8 @@ import org.apache.camel.Processor;
import org.apache.camel.component.crypto.DigitalSignatureConfiguration;
import org.apache.camel.component.crypto.DigitalSignatureConstants;
import org.apache.camel.util.ExchangeHelper;
+import org.apache.camel.util.ObjectHelper;
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.KEYSTORE_ALIAS;
public abstract class DigitalSignatureProcessor implements Processor {
@@ -56,7 +56,7 @@ public abstract class DigitalSignaturePr
protected String getAlias(Exchange exchange) throws Exception {
KeyStore keystore = config.getKeystore();
if (keystore != null) {
- String alias = exchange.getIn().getHeader(KEYSTORE_ALIAS, String.class);
+ String alias = exchange.getIn().getHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, String.class);
if (alias == null) {
alias = config.getAlias();
}
@@ -85,7 +85,7 @@ public abstract class DigitalSignaturePr
if (config.getClearHeaders()) {
Map<String, Object> headers = in.getHeaders();
for (Field f : DigitalSignatureConstants.class.getFields()) {
- headers.remove(f.getName());
+ headers.remove(ObjectHelper.lookupConstantFieldValue(DigitalSignatureConstants.class, f.getName()));
}
}
}
Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java Thu Feb 9 03:39:20 2012
@@ -28,7 +28,6 @@ import org.apache.camel.component.crypto
import org.apache.camel.component.crypto.DigitalSignatureConstants;
import org.apache.commons.codec.binary.Base64;
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY;
public class SigningProcessor extends DigitalSignatureProcessor {
@@ -64,10 +63,11 @@ public class SigningProcessor extends Di
PrivateKey pk = config.getPrivateKey(getAlias(exchange), getKeyPassword(exchange));
if (pk == null) {
- pk = exchange.getIn().getHeader(SIGNATURE_PRIVATE_KEY, PrivateKey.class);
+ pk = exchange.getIn().getHeader(DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, PrivateKey.class);
if (pk == null) {
- throw new IllegalStateException(format("Cannot sign message as no Private Key has been supplied. Either supply one in"
- + " the route definition sign(keystore, alias) or sign(privateKey) or via the message header '%s'", SIGNATURE_PRIVATE_KEY));
+ throw new IllegalStateException(format("Cannot sign message as no Private Key has been supplied. "
+ + "Either supply one in the route definition sign(keystore, alias) or sign(privateKey) "
+ + "or via the message header '%s'", DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY));
}
}
return pk;
Modified: camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java (original)
+++ camel/trunk/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java Thu Feb 9 03:39:20 2012
@@ -23,10 +23,10 @@ import java.security.cert.Certificate;
import org.apache.camel.Exchange;
import org.apache.camel.component.crypto.DigitalSignatureConfiguration;
+import org.apache.camel.component.crypto.DigitalSignatureConstants;
import org.apache.camel.util.ExchangeHelper;
import org.apache.commons.codec.binary.Base64;
-import static org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT;
/**
* <code>VerifyingProcessor</code>
@@ -44,7 +44,7 @@ public class VerifyingProcessor extends
PublicKey pk = getPublicKeyOrCertificateFromHeader(exchange, PublicKey.class, config.getPublicKey());
if (pk == null) {
throw new IllegalStateException(String.format("Cannot verify signature as no Public Key or Certificate has been supplied."
- + " Either supply one in the route definition or via the message header '%s'", SIGNATURE_PUBLIC_KEY_OR_CERT));
+ + " Either supply one in the route definition or via the message header '%s'", DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT));
}
signer.initVerify(pk);
} else {
@@ -74,7 +74,7 @@ public class VerifyingProcessor extends
}
private <T> T getPublicKeyOrCertificateFromHeader(Exchange exchange, Class<? extends T> verificationType, T defaultsTo) {
- T pkOrCert = exchange.getIn().getHeader(SIGNATURE_PUBLIC_KEY_OR_CERT, verificationType);
+ T pkOrCert = exchange.getIn().getHeader(DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, verificationType);
if (pkOrCert == null) {
pkOrCert = defaultsTo;
}
Modified: camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java (original)
+++ camel/trunk/components/camel-crypto/src/test/java/org/apache/camel/component/crypto/SignatureTests.java Thu Feb 9 03:39:20 2012
@@ -30,6 +30,7 @@ import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
+import org.apache.camel.Message;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
@@ -135,6 +136,12 @@ public class SignatureTests extends Came
from("direct:headerkey-verify").to("crypto:verify://alias", "mock:result");
// END SNIPPET: headerkey
}
+ }, new RouteBuilder() {
+ public void configure() throws Exception {
+ // START SNIPPET: clearheaders
+ from("direct:headers").to("crypto:sign://headers?privateKey=#myPrivateKey", "crypto:verify://headers?publicKey=#myPublicKey&clearHeaders=false", "mock:result");
+ // END SNIPPET: clearheaders
+ }
}};
}
@@ -143,6 +150,11 @@ public class SignatureTests extends Came
setupMock();
sendBody("direct:keypair", payload);
assertMockEndpointsSatisfied();
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ Exchange e = mock.getExchanges().get(0);
+ Message result = e == null ? null : e.hasOut() ? e.getOut() : e.getIn();
+ assertNull(result.getHeader(DigitalSignatureConstants.SIGNATURE));
}
@Test
@@ -268,6 +280,19 @@ public class SignatureTests extends Came
assertMockEndpointsSatisfied();
}
+ @Test
+ public void testVerifyHeadersNotCleared() throws Exception {
+ setupMock();
+ template.requestBody("direct:headers", payload);
+ assertMockEndpointsSatisfied();
+ assertMockEndpointsSatisfied();
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ Exchange e = mock.getExchanges().get(0);
+ Message result = e == null ? null : e.hasOut() ? e.getOut() : e.getIn();
+ assertNotNull(result.getHeader(DigitalSignatureConstants.SIGNATURE));
+ }
+
private MockEndpoint setupMock() {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived(payload);
Modified: camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml?rev=1242214&r1=1242213&r2=1242214&view=diff
==============================================================================
--- camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml (original)
+++ camel/trunk/components/camel-crypto/src/test/resources/org/apache/camel/component/crypto/SpringSignatureTests.xml Thu Feb 9 03:39:20 2012
@@ -118,6 +118,14 @@
<to uri="mock:result"/>
</route>
<!-- END SNIPPET: headerkey -->
+ <!-- START SNIPPET: clearheaders -->
+ <route>
+ <from uri="direct:headers"/>
+ <to uri="crypto:sign://headers?privateKey=#myPrivateKey" />
+ <to uri="crypto:verify://headers?publicKey=#myPublicKey&clearHeaders=false" />
+ <to uri="mock:result"/>
+ </route>
+ <!-- END SNIPPET: clearheaders -->
</camelContext>
<bean id="keystore" class="org.apache.camel.component.crypto.SpringSignatureTest" factory-method="keystore"/>