Я посмотрел Groovy на «NoExitSecurityManager» и обнаружил, что он делает именно это: запрещает System.exit () ... чего недостаточно.
Моим решением было создание моего собственного класса "DisallowAllSecurityManager", который расширяет SecurityManager и запрещает все, что не нужно скрипту, например, доступ на запись в файловую систему или подключение к другим хостам, создавая исключение SecurityEx в каждом методе проверки ..
Но: Вы не можете выдать исключение во всех методах проверки ... Вот список проверок .. методов, которые вам нужно разрешить:
- checkCreateClassLoader ()
- checkMemberAccess ()
- checkPackageAccess ()
- checkPermission ()
- checkPropertyAccess ()
- checkRead ()
Когда вы хотите оценить ваш скрипт Groovy, вы можете сделать это следующим образом, ограничив только скрипт Groovy:
SecurityManager securityManager = System.getSecurityManager();
try {
System.setSecurityManager(new DisallowAllSecurityManager());
Object result = groovyShell.evaluate(expression);
...
} catch (...) {
...
} finally {
System.setSecurityManager(securityManager);
}