You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2014/03/28 09:07:09 UTC
svn commit: r1582630 - in
/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto:
batch/CryptoBatchTranslatorFactoryDecorator.java cipher/Encryptor.java
cipher/EncryptorFactory.java
Author: aadamchik
Date: Fri Mar 28 08:07:09 2014
New Revision: 1582630
URL: http://svn.apache.org/r1582630
Log:
CAY-1916 cayenne-crypto module that enables data encryption for certain model attributes
a concept of Encryptor
precompiling Encryptors for batch query execution
Added:
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/Encryptor.java
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/EncryptorFactory.java
Modified:
cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
Modified: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java?rev=1582630&r1=1582629&r2=1582630&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java (original)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java Fri Mar 28 08:07:09 2014
@@ -21,8 +21,8 @@ package org.apache.cayenne.crypto.batch;
import org.apache.cayenne.access.translator.batch.BatchParameterBinding;
import org.apache.cayenne.access.translator.batch.BatchTranslator;
import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
-import org.apache.cayenne.crypto.cipher.CryptoHandler;
-import org.apache.cayenne.crypto.map.ColumnMapper;
+import org.apache.cayenne.crypto.cipher.Encryptor;
+import org.apache.cayenne.crypto.cipher.EncryptorFactory;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.query.BatchQuery;
@@ -33,15 +33,13 @@ import org.apache.cayenne.query.BatchQue
*/
public class CryptoBatchTranslatorFactoryDecorator implements BatchTranslatorFactory {
- private CryptoHandler cryptoHandler;
- private ColumnMapper columnMapper;
+ private EncryptorFactory encryptorFactory;
private BatchTranslatorFactory delegate;
public CryptoBatchTranslatorFactoryDecorator(@Inject BatchTranslatorFactory delegate,
- @Inject CryptoHandler cryptoHandler, @Inject ColumnMapper columnMapper) {
+ @Inject EncryptorFactory encryptorFactory) {
- this.columnMapper = columnMapper;
- this.cryptoHandler = cryptoHandler;
+ this.encryptorFactory = encryptorFactory;
this.delegate = delegate;
}
@@ -51,26 +49,42 @@ public class CryptoBatchTranslatorFactor
return new BatchTranslator() {
+ private int len;
+ private Encryptor[] encryptors;
+
+ private void ensureEncryptorsCompiled() {
+ if (encryptors == null) {
+ BatchParameterBinding[] bindings = getBindings();
+
+ this.len = bindings.length;
+ this.encryptors = new Encryptor[len];
+
+ for (int i = 0; i < len; i++) {
+ encryptors[i] = encryptorFactory.getEncryptor(bindings[i].getAttribute());
+ }
+ }
+ }
+
@Override
public String getSql() {
return delegateTranslator.getSql();
}
-
+
@Override
public BatchParameterBinding[] getBindings() {
return delegateTranslator.getBindings();
}
-
+
@Override
public BatchParameterBinding[] updateBindings(BatchQueryRow row) {
-
+
+ ensureEncryptorsCompiled();
+
BatchParameterBinding[] bindings = delegateTranslator.updateBindings(row);
- for (BatchParameterBinding b : bindings) {
- if (columnMapper.isEncrypted(b.getAttribute())) {
- Object encrypted = cryptoHandler.encrypt(b.getValue(), b.getAttribute().getType());
- b.setValue(encrypted);
- }
+ for (int i = 0; i < len; i++) {
+ Object encrypted = encryptors[i].encrypt(bindings[i].getValue());
+ bindings[i].setValue(encrypted);
}
return bindings;
Added: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/Encryptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/Encryptor.java?rev=1582630&view=auto
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/Encryptor.java (added)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/Encryptor.java Fri Mar 28 08:07:09 2014
@@ -0,0 +1,29 @@
+/*****************************************************************
+ * 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.cayenne.crypto.cipher;
+
+/**
+ * An encryptor object configured to encrypt a value of a certain type.
+ *
+ * @since 3.2
+ */
+public interface Encryptor {
+
+ Object encrypt(Object value);
+}
Added: cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/EncryptorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/EncryptorFactory.java?rev=1582630&view=auto
==============================================================================
--- cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/EncryptorFactory.java (added)
+++ cayenne/main/trunk/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/cipher/EncryptorFactory.java Fri Mar 28 08:07:09 2014
@@ -0,0 +1,29 @@
+/*****************************************************************
+ * 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.cayenne.crypto.cipher;
+
+import org.apache.cayenne.map.DbAttribute;
+
+/**
+ * @since 3.2
+ */
+public interface EncryptorFactory {
+
+ Encryptor getEncryptor(DbAttribute column);
+}