Groovy脚本:如何防止可能的内存泄漏或无限循环
我们打算允许我们的客户在我们的平台内执行他们自己的groovy脚本。他们将只允许访问受控制的方法,但我们有一个问题。 尽管我们会尽一切可能小心,但我们可能会遇到长时间运行循环的风险——导致内存泄漏或无限循环,从而影响我们的平台。Groovy脚本:如何防止可能的内存泄漏或无限循环,groovy,Groovy,我们打算允许我们的客户在我们的平台内执行他们自己的groovy脚本。他们将只允许访问受控制的方法,但我们有一个问题。 尽管我们会尽一切可能小心,但我们可能会遇到长时间运行循环的风险——导致内存泄漏或无限循环,从而影响我们的平台。 groovy脚本中是否有任何固有的方法可以防止这种可能性?您可以使用 好文章 如果可以限制DSL(客户端可以运行的代码),使其只能调用对象上的方法,那么就由您来保证内存不会以任何方式泄漏或滥用 通过传递自定义编译器配置来构建GroovyShell 使用方法添加编译器自定
groovy脚本中是否有任何固有的方法可以防止这种可能性?您可以使用 好文章 如果可以限制DSL(客户端可以运行的代码),使其只能调用对象上的方法,那么就由您来保证内存不会以任何方式泄漏或滥用
编译器配置来构建GroovyShell
添加编译器自定义程序(…)
DelegatingScript
,并将其传递给对象:
DemoDSLHelper delegate = new DemoDSLHelper(); // Your custom class with custom methods you want to expose in the DSL
GroovyShell shell = new GroovyShell(createCompilerConfiguration());
Script script = shell.parse(scriptText);
((DelegatingScript)script).setDelegate(delegate);
Object result = script.run();
通过完整的可运行示例。您可以使用 好文章 如果可以限制DSL(客户端可以运行的代码),使其只能调用对象上的方法,那么就由您来保证内存不会以任何方式泄漏或滥用
编译器配置来构建GroovyShell
添加编译器自定义程序(…)
DelegatingScript
,并将其传递给对象:
DemoDSLHelper delegate = new DemoDSLHelper(); // Your custom class with custom methods you want to expose in the DSL
GroovyShell shell = new GroovyShell(createCompilerConfiguration());
Script script = shell.parse(scriptText);
((DelegatingScript)script).setDelegate(delegate);
Object result = script.run();
还有完整的可运行示例。为什么不在一段时间后终止脚本?循环本身可能是有限的,但今年或明年仍然无法完成。为什么不在一段时间后终止脚本呢?一个循环本身可能是有限的,但仍然不会在今年或明年完成。谢谢Hugues的要点。SecureASTCustomizer看起来很有用。这篇文章也很好。谢谢你的要点。SecureASTCustomizer看起来很有用。这篇文章也不错。