Я работаю над возможностью вызова Groovy скрипта из Java для некоторых расчетов.Поскольку эти вычисления могут использоваться любыми людьми, синтаксис сценария должен быть ограничен.Поэтому я хочу ограничить вызов любого метода класса System или других вредоносных методов, таких как System.exit (0).Я использую CompilerConfiguration с SecureASTCustimizer со следующими настройками:
CompilerConfiguration conf = new CompilerConfiguration();
SecureASTCustomizer customizer = new SecureASTCustomizer();
customizer.setClosuresAllowed(true);
customizer.setMethodDefinitionAllowed(false);
customizer.setPackageAllowed(false);
customizer.setIndirectImportCheckEnabled(true);
customizer.setReceiversWhiteList(Arrays.asList("java.lang.Object","java.lang.Math", "org.codehaus.groovy.runtime.InvokerHelper"));
customizer.setImportsWhitelist(Arrays.asList("java.lang.Math","classWithinScript","java.lang.Object", "org.codehaus.groovy.runtime.InvokerHelper"));
conf.addCompilationCustomizers(customizer);
Groovy-скрипт выглядит следующим образом:
// For table definitions
class classWithinScript{
String TestName;
int value;
}
System.exit(0)
//Some calcualtions are done here
Это отлично работает, если теперь кто-то вводит System.exit(0)
казнь заблокирована.
Но когда я изменяю класс на:
class classWithinScript{
String TestName;
int value;
def any = System.exit(0)
}
//Some calculations
, приложение прекращается.
Как я могу предотвратить этот вызов System.exit()
таким образом?