我正在测试Spring Spel,我在想是否有可能以某种方式限制可以提供的Spel查询类型,以避免一些不必要的代码注入?我只是想从某个对象中获取值,那么是否有可能阻止其他类型的操作?我在Spring文档中找不到这样的功能。
例如,我只想允许检查 test 对象的值是否等于XYZ。
Test test = new Test("XYZ", 999);
ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("value eq 'XYZ'");
System.out.println(expression.getValue(new StandardEvaluationContext(test)));
然而,我想限制哪些表达式是有效的。我不知道如何计算允许执行某些代码的表达式,例如:
Expression expression = expressionParser.parseExpression("''.getClass().forName('java.lang.Runtime').getMethods()[6]");
1条答案
按热度按时间bvjveswy1#
正如@ArtemBilan在评论中提到的,限制SpEL语言语法和消除不必要代码执行的解决方案是使用
SimpleEvaluationContext
类,例如: