From f5e67237fba14b0fb4e1b463c137276c82cd3282 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 26 Apr 2019 08:33:51 +0200 Subject: [PATCH] DATAKV-212 - Favor SimpleEvaluationContext over StandardEvaluationContext This allows us to restrict data binding to be read only. --- .../org/springframework/data/keyvalue/core/SpelCriteria.java | 4 ++-- .../data/keyvalue/core/SpelQueryEngineUnitTests.java | 5 +++-- .../keyvalue/repository/query/SpelQueryCreatorUnitTests.java | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/springframework/data/keyvalue/core/SpelCriteria.java b/src/main/java/org/springframework/data/keyvalue/core/SpelCriteria.java index e74d578..cabce41 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/SpelCriteria.java +++ b/src/main/java/org/springframework/data/keyvalue/core/SpelCriteria.java @@ -17,7 +17,7 @@ package org.springframework.data.keyvalue.core; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpression; -import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.expression.spel.support.SimpleEvaluationContext; import org.springframework.util.Assert; /** @@ -38,7 +38,7 @@ public class SpelCriteria { * @param expression must not be {@literal null}. */ public SpelCriteria(SpelExpression expression) { - this(expression, new StandardEvaluationContext()); + this(expression, SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods().build()); } /** diff --git a/src/test/java/org/springframework/data/keyvalue/core/SpelQueryEngineUnitTests.java b/src/test/java/org/springframework/data/keyvalue/core/SpelQueryEngineUnitTests.java index 947c8b2..5fc3634 100644 --- a/src/test/java/org/springframework/data/keyvalue/core/SpelQueryEngineUnitTests.java +++ b/src/test/java/org/springframework/data/keyvalue/core/SpelQueryEngineUnitTests.java @@ -37,7 +37,7 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.ParametersParameterAccessor; import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.repository.query.parser.PartTree; -import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.expression.spel.support.SimpleEvaluationContext; /** * Unit tests for {@link SpelQueryEngine}. @@ -99,7 +99,8 @@ public class SpelQueryEngineUnitTests { SpelQueryCreator creator = new SpelQueryCreator(partTree, new ParametersParameterAccessor( new QueryMethod(method, metadata, new SpelAwareProxyProjectionFactory()).getParameters(), args)); - return new SpelCriteria(creator.createQuery().getCriteria(), new StandardEvaluationContext(args)); + return new SpelCriteria(creator.createQuery().getCriteria(), + SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods().withRootObject(args).build()); } interface PersonRepository { diff --git a/src/test/java/org/springframework/data/keyvalue/repository/query/SpelQueryCreatorUnitTests.java b/src/test/java/org/springframework/data/keyvalue/repository/query/SpelQueryCreatorUnitTests.java index 7b0a127..8f7818a 100644 --- a/src/test/java/org/springframework/data/keyvalue/repository/query/SpelQueryCreatorUnitTests.java +++ b/src/test/java/org/springframework/data/keyvalue/repository/query/SpelQueryCreatorUnitTests.java @@ -40,7 +40,7 @@ import org.springframework.data.repository.query.ParametersParameterAccessor; import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.repository.query.parser.PartTree; import org.springframework.expression.spel.standard.SpelExpression; -import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.expression.spel.support.SimpleEvaluationContext; import org.springframework.util.ObjectUtils; /** @@ -339,7 +339,8 @@ public class SpelQueryCreatorUnitTests { new QueryMethod(method, metadataMock, new SpelAwareProxyProjectionFactory()).getParameters(), args)); KeyValueQuery q = creator.createQuery(); - q.getCriteria().setEvaluationContext(new StandardEvaluationContext(args)); + q.getCriteria().setEvaluationContext( + SimpleEvaluationContext.forReadOnlyDataBinding().withRootObject(args).withInstanceMethods().build()); return q; }