Почему подписанный Java-апплет не подключается к внешнему серверу? - PullRequest
1 голос
/ 18 февраля 2011

У меня есть Java-апплет, который пытается создать VNC-соединение с другим хостом (обратите внимание, что хост с апплетом и хост VNC НЕ совпадают).Больше информации о коде, с которым я работаю, можно найти здесь

Я получил код для компиляции в XenServerConsole.jar, который я поместил в корень моего веб-сервера вместе со структурой папокcom / citrix / xenserver / console / . (в папке консоли находятся все файлы .java, .class и некоторые файлы .png).

Я подписал файл XenServerConsole.jar следующим образом:

keytool -genkey -validity 3650 -keystore pKeyStore -alias keyName
keytool -selfcert -keystore pKeyStore -alias keyName -validity 3650
jarsigner -keystore pKeyStore XenServerConsole.jar keyName

и я загружаю апплет в HTML, как показано в следующем коде:

<applet code="com/citrix/xenserver/console/Initialize.class"
    archive="/XenServerConsole.jar"
    width="800" height="600">
    <PARAM NAME="SESSION" VALUE="<%= @console_session %>">
    <PARAM NAME="URL" VALUE="<%= @console_url %>">
    <PARAM NAME="USEURL" VALUE="true">
</applet>

По какой-то причине я все еще получаю ошибку Socket Permission, вот вывод консоли:

Loading UI...
Initializing...
Starting main...
Creating controls...
Adding controls...
Starting...
Connection failed: access denied (java.net.SocketPermission 192.168.0.2:443 connect,resolve)
Connection closed
Reconnecting in 5 seconds...

Я думал, что подписание файла JAR вызовет предупреждение, когда пользователь получит доступ к HTML-странице, и если они примут, что это может нормально подключиться к другому серверу.Я получаю запрос на запуск / отмену в Windows (не OSX), но все равно ошибка SocketPermission.

Почему код все еще вызывает ошибку?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Я понял это.Сначала я обнаружил, что каждый раз, когда вы работаете с апплетами, вам нужно проверять очистку кэша загрузчика классов при каждом тесте.Чтобы сделать это, сфокусируйтесь на java-консоли и нажмите «x» (по крайней мере, так оно и работает в OS X - Safari).

Подписание апплета, как я перечислил выше, DID WORK, как видно из комментарияна исходный вопрос после того, как я сбросил кеш загрузчика классов, я больше не получал SocketPermission, но все равно не получилось, вот почему:

Апплет Java, хотя и обслуживаемый с веб-сервера, работает на вашем локальном компьютере, ив этом случае апплет пытался подключиться к URL-адресу, к которому у моего локального компьютера не было доступа, но веб-сервер сделал.Вот почему я получаю ошибку тайм-аута / NPE.(Сервер, на котором я пытался подключиться к VNC, находится на локальной сети веб-сервера и недоступен через Интернет).

Итак, мне нужно создать туннель от веб-сервера до цели VNC и указать эту информацию о соединении в HTML-коде моего апплета.Но все это выходит за рамки этого вопроса.

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

Вы установили политику безопасности и упаковали ее вместе с jar ??

Гораздо больше информации о политиках.

...