Browse Source

tmp save

issue/4185-light
Christoph Strobl 9 months ago
parent
commit
8fb2cb35b9
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 37
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/encryption/MongoEncryptionConverter.java

37
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/encryption/MongoEncryptionConverter.java

@ -40,7 +40,6 @@ import org.springframework.data.mongodb.core.encryption.EncryptionKey;
import org.springframework.data.mongodb.core.encryption.EncryptionKeyResolver; import org.springframework.data.mongodb.core.encryption.EncryptionKeyResolver;
import org.springframework.data.mongodb.core.encryption.EncryptionOptions; import org.springframework.data.mongodb.core.encryption.EncryptionOptions;
import org.springframework.data.mongodb.core.mapping.Encrypted; import org.springframework.data.mongodb.core.mapping.Encrypted;
import org.springframework.data.mongodb.core.mapping.ExplicitEncrypted;
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
import org.springframework.data.mongodb.core.mapping.RangeEncrypted; import org.springframework.data.mongodb.core.mapping.RangeEncrypted;
import org.springframework.data.mongodb.util.BsonUtils; import org.springframework.data.mongodb.util.BsonUtils;
@ -172,19 +171,30 @@ public class MongoEncryptionConverter implements EncryptingConverter<Object, Obj
getProperty(context).getOwner().getName(), getProperty(context).getName())); getProperty(context).getOwner().getName(), getProperty(context).getName()));
} }
boolean encryptExpression = false;
String algorithm = annotation.algorithm(); String algorithm = annotation.algorithm();
EncryptionKey key = keyResolver.getKey(context); EncryptionKey key = keyResolver.getKey(context);
EncryptionOptions encryptionOptions = new EncryptionOptions(algorithm, key);
String fieldNameAndQueryOperator = context.getFieldNameAndQueryOperator(); String fieldNameAndQueryOperator = context.getFieldNameAndQueryOperator();
ExplicitEncrypted explicitEncryptedAnnotation = persistentProperty.findAnnotation(ExplicitEncrypted.class); EncryptionOptions encryptionOptions = new EncryptionOptions(algorithm, key,
if (explicitEncryptedAnnotation != null) { getEQOptions(persistentProperty, fieldNameAndQueryOperator));
encryptionOptions = new EncryptionOptions(algorithm, key, QueryableEncryptionOptions.none());
if (fieldNameAndQueryOperator != null
&& !encryptionOptions.queryableEncryptionOptions().equals(QueryableEncryptionOptions.none())) {
return encryptExpression(fieldNameAndQueryOperator, value, encryptionOptions);
} else { } else {
RangeEncrypted rangeEncryptedAnnotation = persistentProperty.findAnnotation(RangeEncrypted.class); return encryptValue(value, context, persistentProperty, encryptionOptions);
if (rangeEncryptedAnnotation != null) { }
}
private static QueryableEncryptionOptions getEQOptions(MongoPersistentProperty persistentProperty,
String fieldNameAndQueryOperator) {
QueryableEncryptionOptions queryableEncryptionOptions = QueryableEncryptionOptions.none(); QueryableEncryptionOptions queryableEncryptionOptions = QueryableEncryptionOptions.none();
RangeEncrypted rangeEncryptedAnnotation = persistentProperty.findAnnotation(RangeEncrypted.class);
if (rangeEncryptedAnnotation == null) {
return queryableEncryptionOptions;
}
String rangeOptions = rangeEncryptedAnnotation.rangeOptions(); String rangeOptions = rangeEncryptedAnnotation.rangeOptions();
if (!rangeOptions.isEmpty()) { if (!rangeOptions.isEmpty()) {
queryableEncryptionOptions = queryableEncryptionOptions.attributes(Document.parse(rangeOptions)); queryableEncryptionOptions = queryableEncryptionOptions.attributes(Document.parse(rangeOptions));
@ -197,18 +207,9 @@ public class MongoEncryptionConverter implements EncryptingConverter<Object, Obj
boolean isPartOfARangeQuery = fieldNameAndQueryOperator != null; boolean isPartOfARangeQuery = fieldNameAndQueryOperator != null;
if (isPartOfARangeQuery) { if (isPartOfARangeQuery) {
encryptExpression = true;
queryableEncryptionOptions = queryableEncryptionOptions.queryType("range"); queryableEncryptionOptions = queryableEncryptionOptions.queryType("range");
} }
encryptionOptions = new EncryptionOptions(algorithm, key, queryableEncryptionOptions); return queryableEncryptionOptions;
}
}
if (encryptExpression) {
return encryptExpression(fieldNameAndQueryOperator, value, encryptionOptions);
} else {
return encryptValue(value, context, persistentProperty, encryptionOptions);
}
} }
private BsonBinary encryptValue(Object value, EncryptionContext context, MongoPersistentProperty persistentProperty, private BsonBinary encryptValue(Object value, EncryptionContext context, MongoPersistentProperty persistentProperty,

Loading…
Cancel
Save