Почему неподписанные апплеты не могут создавать собственные загрузчики классов? - PullRequest
3 голосов
/ 05 февраля 2011

Java-апплеты не позволяют вам написать собственный ClassLoader, если вы не подпишете свой апплет. Почему это так? Пользовательский ClassLoader - это просто инструмент для поиска классов. На самом деле вы не можете загрузить класс, кроме как путем вызова частного метода defineClass, который является «доверенным» кодом в том смысле, что он написан и контролируется виртуальной машиной, а не вашим апплетом. Это не значит, что вы получаете больше прав, чем возможность динамически загружать класс ... Что на самом деле ничего не значит.

Думаю, как побочный вопрос: есть ли другой способ динамически перейти от

byte[] => Class

что разрешено неподписанным апплетам?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2011

defineClass имеет параметр ProtectionDomain, который вы можете передать с помощью PermissionCollection, содержащей AllPermission, который позволит вам делать в основном все с хостом.

0 голосов
/ 17 февраля 2011

Обратите внимание, вы можете создать ClassLoader с java.net.URLClassLoader.newInstance. Как указывает bkail, пользовательский ClassLoader может создавать классы с произвольными разрешениями, а также обходить другие ограничения безопасности. Что касается того, почему нет, то нет ничего более общего, чем java.net.URLClassLoader.newInstance, ну, просто нет.

...