Песочница JSR-223

Я пытаюсь использовать песочницу JSR-223. В частности, я не хочу, чтобы script имел доступ к любому из моих классов. (Я слышал, что Rhino может сделать это с помощью ClassShutter, но я хочу сделать это вообще, т.е. Для всех script двигателей JSR-223).

Сначала я попытался использовать решение AccessController.doPrivileged, не передав никаких разрешений вообще. Он работает для большинства разрешений, но скрипты могут получить доступ ко всем моим общедоступным классам (он, кажется, игнорирует разрешение доступа к пакету...?).

I нашел это. Мой вопрос: как установить пользовательский ClassLoader в движок script? (Или Как заменить ClassLoader глобально, если мне нужно?)

Ответы

Ответ 1

Существует конструктор для ScriptEngineManager, который принимает загрузчик классов. Погрузчик классов используется для загрузки реализации механизма сценариев. Поскольку классы наследуют их загрузчики классов, механизм сценариев и любые созданные им объекты также должны использовать этот загрузчик классов.

Этот загрузчик классов должен отрицать существование любых классов, которые не имеют белого цвета.

Скомпонуйте его с помощью специального SecurityManager, чтобы вы могли использовать проверки доступа к используемому загрузчику классов.

Изменить: Здесь статья, которую я нашел в Песочница Rhino в Java. Большая часть из них должна также применяться к JSR-223. Реализация Sun - это Rhino с изменениями, поэтому могут быть некоторые различия.

Ответ 2

Возможно ли запустить часть вашего приложения, для которой требуется механизм сценариев в отдельной JVM? Вы можете запустить JVM сценариев с другим классом классов (и менеджером безопасности), а затем использовать некоторую форму легкого сообщения, проходящего между двумя JVM.

Ответ 3

Смотрите http://code.google.com/p/prebake/source/browse/trunk/code/src/org/prebake/js/RhinoExecutor.java и связанные классы в том же пакете, особенно там SANDBOXING_FACTORY.

Этот код, который изолирует интерпретатор носорога, позволяет ему получить доступ к файловой системе, опосредованной загрузчиком.