Загрузка классов Java из подписанного апплета

Если я использую подписанный Java-апплет. Могу ли я загрузить дополнительные классы из удаленных источников, в том же домене или, может быть, даже на том же хосте, и запустить их?

Я бы хотел сделать это, не меняя страницы и даже не останавливая текущий апплет. Конечно, общий размер всех классов слишком велик, чтобы загружать их все сразу.

Есть ли способ сделать это? И есть ли способ сделать это с подписанными апплетами и сохранить их статус «уверенности»?


person Community    schedule 13.09.2008    source источник


Ответы (3)


Я считаю, что классы лениво загружаются в апплеты. загружается по запросу.

В любом случае, если классы находятся вне jar, вы можете просто использовать загрузчик классов апплета и загружать их по имени. Бывший:

ClassLoader loader = this.getClass().getClassLoader();
Class clazz = loader.loadClass("acme.AppletAddon");

Если вы хотите загрузить классы из банки, я думаю, вам нужно будет создать новый экземпляр URLClassLoader с URL-адресами банки.

URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
Class clazz = loader.loadClass("acme.AppletAddon");

По умолчанию апплетам запрещено создавать новые загрузчики классов. Но если вы подпишете свой апплет и включите разрешение на создание новых загрузчиков классов, вы сможете это сделать.

person jassuncao    schedule 13.09.2008
comment
Спасибо, URLClassLoader кажется именно тем, что я хотел. Мне просто нужно убедиться, что я могу сохранить цепочку подписей в целости. - person ; 13.09.2008
comment
Он работал после того, как был подписан родительский апплет (загрузчик). Но дочерние (загруженные) jar-файлы, даже если они подписаны, не получают разрешений безопасности. - person ; 14.09.2008

Да, вы можете открывать URL-соединения с хостом, с которого запускали апплет. Вы можете либо создать загрузчик классов с URL-адресами HTTP, либо загрузить классы (как jar-файлы) на компьютер пользователя и создать загрузчик классов с этими jar-файлами в пути к классам. Апплет не останавливается, и вам не нужно загружать другую страницу.

Что касается второй части вашего вопроса о доверии, как только пользователь предоставил доступ к вашему апплету, он может загрузить что угодно, да что угодно, на локальную машину. Вы, вероятно, сможете проинформировать пользователя о том, что он делает, если ваш дизайн пользовательского интерфейса позволяет это.

Надеюсь это поможет.

person Community    schedule 14.09.2008
comment
Молодец, спасибо. Хотел бы я принять / объединить оба ответа. - person ; 14.09.2008
comment
К сожалению, как я прокомментировал ответ jassuncao, загруженный апплет пока не имеет соответствующих разрешений. - person ; 14.09.2008

Похоже, это должно быть возможно (но я никогда этого не делал). Вы уже знакомы с удаленным вызовом метода (RMI )?

person John Smithers    schedule 13.09.2008