diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/encryption/MongoEncryptionConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/encryption/MongoEncryptionConverter.java index 5712c13d1..274bfa85a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/encryption/MongoEncryptionConverter.java +++ b/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.EncryptionOptions; 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.RangeEncrypted; import org.springframework.data.mongodb.util.BsonUtils; @@ -172,43 +171,45 @@ public class MongoEncryptionConverter implements EncryptingConverter= 0) { - queryableEncryptionOptions = queryableEncryptionOptions - .contentionFactor(rangeEncryptedAnnotation.contentionFactor()); - } + private static QueryableEncryptionOptions getEQOptions(MongoPersistentProperty persistentProperty, + String fieldNameAndQueryOperator) { - boolean isPartOfARangeQuery = fieldNameAndQueryOperator != null; - if (isPartOfARangeQuery) { - encryptExpression = true; - queryableEncryptionOptions = queryableEncryptionOptions.queryType("range"); - } - encryptionOptions = new EncryptionOptions(algorithm, key, queryableEncryptionOptions); - } + QueryableEncryptionOptions queryableEncryptionOptions = QueryableEncryptionOptions.none(); + RangeEncrypted rangeEncryptedAnnotation = persistentProperty.findAnnotation(RangeEncrypted.class); + if (rangeEncryptedAnnotation == null) { + return queryableEncryptionOptions; } - if (encryptExpression) { - return encryptExpression(fieldNameAndQueryOperator, value, encryptionOptions); - } else { - return encryptValue(value, context, persistentProperty, encryptionOptions); + String rangeOptions = rangeEncryptedAnnotation.rangeOptions(); + if (!rangeOptions.isEmpty()) { + queryableEncryptionOptions = queryableEncryptionOptions.attributes(Document.parse(rangeOptions)); + } + + if (rangeEncryptedAnnotation.contentionFactor() >= 0) { + queryableEncryptionOptions = queryableEncryptionOptions + .contentionFactor(rangeEncryptedAnnotation.contentionFactor()); + } + + boolean isPartOfARangeQuery = fieldNameAndQueryOperator != null; + if (isPartOfARangeQuery) { + queryableEncryptionOptions = queryableEncryptionOptions.queryType("range"); } + return queryableEncryptionOptions; } private BsonBinary encryptValue(Object value, EncryptionContext context, MongoPersistentProperty persistentProperty,