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