2013-08-30 3 views
2

У меня есть JFrame с JPanel в нем. Я загружаю ненадежный сторонний код, который должен добавить некоторые компоненты в мой JPanel. Как я могу изолировать свой JPanel таким образом, чтобы сделать невозможным доступ сторонних компонентов к ресурсам за пределами JPanel (например, JFrame)?Песочница JPanel внутри JFrame

+0

Вы можете попробовать загрузить сторонний код в загрузчике класса, основанного на безопасности. Не сделал это сам, но вы могли бы посмотреть на [это] (http://stackoverflow.com/questions/1791060/java-security-classloader) – MadProgrammer

+0

Вы заглянули в [Security Manager] (http://docs.oracle .com/javase/7/docs/api/java/lang/SecurityManager.html)? – Marc

+0

Разве менеджер безопасности не обрабатывает такие файлы, как доступ к файлам и т. Д.? Я не знал, что он может ограничить доступ к объектам, как хочет Флавио. – treeno

ответ

0

Это будет сложно, так как ваш JPanel расширяет JComponent, у которого есть getParent(), который вернет ваш JFrame ... Поскольку каждый компонент Swing реализует это, вполне вероятно, что ваш сторонний компонент также реализует это. Вы можете попробовать переписать эти методы, но я не думаю, что качели все равно будут работать правильно, потому что вы будете вырезать ComponentTree, делая это ...

Не могли бы вы объяснить, как вы загружаете этот ненадежный код? Это библиотека или вы загружаете ее во время выполнения путем отражения или чего-то подобного?

+0

Извините, что забыл упомянуть об этом. Я загружаю код во время выполнения с помощью URLClassLoader. В основном я динамически загружаю класс, создаю новый экземпляр, а затем вызываю некоторые методы на этом экземпляре, которые возвращают компоненты SWING, такие как JPanel или JButton. Должен ли я создать новый JFrame вместо добавления их в JPanel? – Flavio

+0

Mmmh JFrame будет корнем ComponentTree .. это звучит хорошо для меня. Но это изменит использование и дизайн gui ... Возможно, более важно ограничить доступ к файловой системе и сети. Даже если вы найдете способ ограничить доступ к Swing-Classes, это не будет заставлять внешний код доступа к другим данным на вашей локальной машине и отправлять их на какой-либо сервер в Интернете. – treeno

+0

На самом деле у меня есть собственный SecurityManager. Загрузка внешних компонентов «безопасно» в моем окне - единственная проблема, которую я не могу решить, потому что, например, они могут вызывать .getParent() и модифицировать это. Создание нового JFrame может работать, но это действительно испортит весь пользовательский интерфейс. Я все еще пытаюсь понять, могу ли я сделать что-то полезное с помощью JPanel – Flavio

Смежные вопросы