Тестирование JCTerm, эмулятора терминала java-апплетов, работает в Eclipse, но не в браузерах

#java #applet #jsch #appletviewer

#java #апплет #jsch #appletviewer

Вопрос:

Тестирование неизмененной версии JCTerm (эмулятор терминала, может использоваться как апплет; я хотел бы использовать функциональность апплета), кажется, что в AppletViewer от Eclipse все работает нормально, но при тестировании результирующего файла jar на веб-странице все опции отображают окно сообщения с мигающим желтым предупреждающим символом и ничего не делают. Некоторые параметры отображают ошибку «Установить соединение до этой настройки».

Меня интересует опция «Открыть сеанс командной строки …» из меню «Файл». При попытке выбрать опцию «Открыть сеанс оболочки …» консоль Java для апплета отображает этот материал, который, по-видимому, напрямую связан. Хотя я понятия не имею, что это значит.

     network: Connecting http://xxx.xx.xx.xxx/crossdomain.xml with proxy=DIRECT
    network: Connecting http://xxx.xx.xx.xxx:80/ with proxy=DIRECT
    java.security.PrivilegedActionException: java.net.ConnectException: Connection refused: connect
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
        at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
        at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at com.jcraft.jsch.Util$1.run(Util.java:354)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
        ... 10 more    
  

Пример корректной работы этой программы можно найти здесь,http://wiredx.net/jcterm /

Ответ №1:

Я автор jcterm. Файлы jar вhttp://wiredx.net/jcterm / были подписаны цифровой подписью. Итак, если вы скопируете и установите эти файлы на свой веб-сервер, это сработает.

Ответ №2:

Это похоже на проблему безопасности.

По умолчанию неподписанный Java-апплет может подключаться к хосту, только если был загружен с. Кроме того, если хост, к которому вы хотите подключиться, разрешает это с помощью crossdomain.xml файл, вы также можете подключаться к другим хостам.

Судя по трассировке стека, вы хотите подключиться к хосту, у которого нет HTTP-сервера, и поэтому он не может предоставить crossdomain.xml файл. По этой причине вы получаете это исключение здесь.

Из этого есть следующие пути:

  • Поместите апплет на тот же веб-сервер, к которому вы хотите подключиться по SSH позже. (Каждый апплет может подключаться к своему собственному хосту.)
  • Пусть у SSH-сервера есть минимальный веб-сервер с crossdomain.xml . (The crossdomain.xml необходимо разрешить доступ к этому серверу содержимому с сервера апплета.)
  • Подпишите апплет (и позвольте пользователю доверять ему). (Подписанным и доверенным апплетам разрешено делать все.)

Официальный пример апплета WiredX, на который вы ссылались, использует последний метод, вот почему он работает даже при подключении к вашему серверу.

Комментарии:

1. Да, подписание файлов jar решило проблему. Ресурсы, которые я нашел полезными для выяснения того, как получить jar-файлы с цифровой подписью: Учебное пособие по апплетам с подписью и учебные пособия по Java: понимание подписи и проверки .