MVEL:如何防止java.lang.*类出现在表达式之外?

MVEL:如何防止java.lang.*类出现在表达式之外?,mvel,Mvel,我正在尝试对MVEL表达式求值进行沙箱处理。不幸的是,默认情况下,MVEL包含表达式语言中的所有java.lang.*类,因此用户可以调用“Runtime.exit()”并终止整个系统 如何排除所有未使用addImport()显式添加的类 我还无法确定变量解析程序的开头或结尾。据我所知,这是不受支持的 不久前,我在公司的一个项目中遇到了这种需求。我们不得不对MVEL进行一些修改,以引入一种配置自定义策略以控制对类型和方法的访问的方法。 问题是,您还可以通过其完全限定名访问任何类,因此这不仅仅是删

我正在尝试对MVEL表达式求值进行沙箱处理。不幸的是,默认情况下,MVEL包含表达式语言中的所有java.lang.*类,因此用户可以调用“Runtime.exit()”并终止整个系统

如何排除所有未使用addImport()显式添加的类


我还无法确定变量解析程序的开头或结尾。

据我所知,这是不受支持的

不久前,我在公司的一个项目中遇到了这种需求。我们不得不对MVEL进行一些修改,以引入一种配置自定义策略以控制对类型和方法的访问的方法。 问题是,您还可以通过其完全限定名访问任何类,因此这不仅仅是删除默认导入的问题。
不幸的是,我没有代码使其可用。

您是否尝试过使用AspectJ来约束来自MVEL的这些调用?

这太糟糕了。我真的很喜欢MVEL。不知道这有什么帮助?实现某种安全沙盒?您的答案有被删除的危险。你真的需要解释这里发生了什么,以及这是如何回答这个问题的。
ParserContext ctx = new ParserContext();

ctx.addImport("System", String.class);
ctx.addImport("Runtime", String.class);