Я хочу запустить несколько непроверенных сценариев (написанных на языке, который еще предстоит определить, но должен быть основан на Java, поэтому кандидатами являются JRuby, Groovy, Jython, BeanShell и т. Д.). Я хочу, чтобы эти скрипты могли делать одни вещи и были ограничены в других делах.
Обычно я бы просто использовал Java SecurityManager и покончил с этим. Это довольно просто и позволяет мне ограничивать доступ к файлам и сети, возможность выключения JVM и т. Д. И это хорошо работает для вещей высокого уровня, которые я хочу заблокировать.
Но есть кое-что, что я хочу разрешить, но только через свой собственный API / библиотеку, которую я предоставил. Например, я не хочу разрешать прямой доступ к сети для открытия URLConnection на yahoo.com, но я в порядке, если это будет сделано с MyURLConnection. То есть - есть набор методов / классов, которые я хочу разрешить, а затем все остальное, что я хочу запретить.
Я не верю, что этот тип безопасности может быть реализован с помощью стандартной модели безопасности Java, но, возможно, это возможно. У меня нет особых требований к производительности или гибкости самого языка сценариев (сценарии будут простыми процедурными вызовами моего API с базовым циклом / ветвлением). Так что даже «большие» накладные расходы, связанные с проверкой безопасности при каждом вызове отражения, меня устраивают.
Предложения?