Ez a szabály jelzi a
org.springframework.expression.spel.support.SimpleEvaluationContext
a címen Expression.getValue(...).
A Spring keretrendszerben 6.0, a SimpleEvaluationContext úgy lett módosítva, hogy teljesen letiltja a tömbkiosztást a SpEL kifejezésekben, igazodva a standard konstruktor feloldási viselkedéshez. Ez a változás olyan kódot érint, amely a SimpleEvaluationContext a SpEL kifejezések kiértékelésére használ, amelyek vagy explicit módon hoznak létre tömböket, vagy meghívják a metódusokat varargs paraméterekkel rendelkező metódusokat hívnak.
A Spring 6-ra történő áttéréskor vizsgálja felül az összes hívást a
Expression.getValue(...) ahol a
SimpleEvaluationContext a használják. Győződjön meg róla, hogy az értékelt SpEL kifejezések nem támaszkodnak olyan tulajdonságokra, amelyek nem támogatottak a következő rendszerben
SimpleEvaluationContext, mint például tömb létrehozása vagy varargs metódushívások.
Ha a felhasználási esete tömb létrehozását vagy varargs metódushívást igényel a SpEL kifejezésben, akkor vagy átkapcsolhatja a a
SimpleEvaluationContext eddig:
StandardEvaluationContext, vagy alakítsa át a SpEL kifejezéseket úgy, hogy teljesen elkerülje az ilyen konstrukciókat.
A következő példa olyan használatot mutat, amely jelölésre kerül, mert
SimpleEvaluationContext átadásra kerül a címre
Expression.getValue(...). Míg a kifejezések a Spring 6 alatt futás közben meghiúsulhatnak a nem támogatott tulajdonságok miatt, mint például a tömbök létrehozása vagy a varargs, ez a szabály magát a kontextus használatát jelzi, függetlenül a kifejezéstől függetlenül.
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.SimpleEvaluationContext;
public class InvalidSpelArrayUsage {
public void failAtRuntime() {
SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
ExpressionParser parser = new SpelExpressionParser();
parser.parseExpression("new String[1]").getValue(context); // Should be flagged
parser.parseExpression("join('a', 'b', 'c')").getValue(context); // Should be flagged
}
}
A következő példa egy érvényes felhasználási módot mutat, ahol
StandardEvaluationContext használják, amely támogatja az összes SpEL funkciót.
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class ValidSpelUsage {
public void worksCorrectly() {
StandardEvaluationContext context = new StandardEvaluationContext();
ExpressionParser parser = new SpelExpressionParser();
parser.parseExpression("new String[1]").getValue(context); // allowed
parser.parseExpression("join('a', 'b', 'c')").getValue(context); //allowed
}
}
Az alábbi információforrások nyújtanak további tájékoztatást: