|
Модераторы: LSD, AntonSaburov |
|
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Прежде всего - мой уровень в Java нулевой. Пришлось заняться в связи с войной браузеров.
Задача: Нужно из браузерного JavaScript вызывать функции *.dll, *.so (ЭЦП, работа с оборудованием, работа с принтером) Раньше этим занимался JavaApplet, но в связи с отказом содателей браузеров от поддержки NPAPI они перестали работать (в Chrome Java уже не работает, в Mozilla Firefox перестанет работать через год). Идея решения такова: 1. Написать Java-приложение, которое будет запускаться через JNLS (Java Web Start). 2. Java-приложение должно уметь работать с dll. 3. Java-приложение должно открывать порт для чтения HTTP-трафика (обеспечивать серверную сторону WebSocket). 4. Написать код JavaScript, который будет обращаться к Java-приложению через WebSocket. Т.е. загрузили Web-страницу, вызвали загрузку JNLP. После этого пуляем JSON через WebSocket и получаем асинхронные ответы. Вопросы: Как реализовать п3? Подозреваю что в JDK должно быть готовое решение, но я его не нашел - все примеры используют Tomcat или GlassFish. Есть рабочий пример UploadServer, который может принимать файлы по HTTP. Взят отсюда Пример простейшего серверного приложения на Java и запилен в проект NetBeans 8 (по умолчанию висит на порту 8011). Но тут прийдется анализировать заголовки, извлекать из "грязного" текста нужное мне тело пакета (данные в формате JSON). Прошу сориентировать в этом вопросе. Может есть простой готовый класс основанный на событиях. Произошло событие "пишли данные" в параметре data лежит тело пакета, а в параметре headers HTTP заголовки. Может первичная задача вообще решается не так, как я думаю. Это сообщение отредактировал(а) ZVano - 28.10.2015, 12:11 Присоединённый файл ( Кол-во скачиваний: 1 ) UploadServer_md5_b15d4a2ab8a26fa453bcab1e3d141e53.zip 26,85 Kb -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
Зачем вам вообще веб часть при наличии полноценного десктоп приложения?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Потому что уже написаны мегатонны кода и никто переделывать его не будет.
Техзадание было на Web-приложение. -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
Disclaimer: то что вы пытаетесь реализовать это извращение с кучей подводных камней (типа как обойти фаервол, где и как смотреть логи и т.п.). И лучше все таки изменить архитектуру, хотя бы показывать приложение внутри JxBrowser (или в чем-то подобном).
Если же надо именно реализовать вебсервер, то надо просто взять готовую реализацию вебсервера. Например NanoHTTPD, и написать свои обработчики событий. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ZVano |
|
||||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Скорее всего я недостаточно понятно описал ситуацию и Вы просто поняли что требуется. Нужно из JavaScript вызвать функцию dll и получить результат. Все остальное следствие. Попробую объяснить по другому. Имеем Web-приложение с серверной частью на PHP+Apache. Клиенты в браузере набивают некие данные (например платежки или отчет в налоговую). И вот наступает момент, когда нужно наложить на эти данные цифровую подпись (ЭЦП). Наложением ЭЦП занимается сертифицированная библиотека в *.dll и *.so файлах. Операция наложения подписи должна происходить на стороне клиента т.к. приватный ключ у него на флешке и гонять его на Web-сервер нельзя. Что делать? Выкрутились использованием Java-апплета, который загружается в браузер клиента и предоставляет возможность коду JavaScript вызывать функции dll. И тут как снег на голову новость о том, что Java-апплеты скоро перестанут работать. Вот и приходится искать решение. Как бы Вы поступили в моем случае? Какие есть решения, кроме того чтобы выгружать данные для подписи в файл и подписывать его отдельной софтиной? И эта проблемма не только у нас. Почти все банки вынуждены ее решать. Посмотрите какой вой подняли в теме Firefox прекращает поддержку плагинов NPAPI, за исключением Adobe Flash PS: кроме наложения ЭЦП нужно и с железками работать (в некоторых модулях). Java нужна всего в паре-тройке модулей из нескольких сотен. PPS: Спасибо. Вроде подходит. Во всяком случае запущеный пример nanohttpd-websocket отработал - страница браузера отправила пакет с данными и получила его же. Правда, при билде ругается на то, что не пройден тест. Но это уже вопрос в другую тему.
Это сообщение отредактировал(а) ZVano - 28.10.2015, 18:39 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
||||
|
|||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
Так это просто ключ на флешке или токен который сам все подписывает? It depends... - Кто использует приложение - внутренние или внешние клиенты. - На каких ОС и браузерах оно используется и можно ли сократить этот круг. - Планируется ли дальнейшее активное развитие приложения. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ZVano |
|
||||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Токен. "Кристалл 1" отсюда и пример JavaApplet отсюда Не забываем что кроме ЭЦП есть еще обращение к железякам через dll. В основном внешние.
ОС Windows для спецмодулей и любые другие для остального. Браузеров зоопарк и они забиты в ТЗ. Я не знаю. Это только руководству известно. Это сообщение отредактировал(а) ZVano - 29.10.2015, 16:25 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
||||
|
|||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
В принципе тогда вариантов действительно немного. Или локальный вебсервер или приложение. Мне лично больше нравится вариант с веб браузера внутри Java приложения, т.к.:
1. Тут нет сетевого взаимодействия и нет риска что будет проблемы с сетью из-за фаервола или cross origin request. 2. Диагностика проще, Java приложение может собирать логи свои и вебстраницы и любую дополнительную информацию. 3. Фиксированная версия браузера. 4. Приложение может предоставлять больше функций чем вебстраничка внутри браузера. Нотификации, работа в офлайне, более продвинутая работа с файлами и т.п. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
А как в этом случае использовать уже существующий код, который крутится на внешнем Web-сервере? Апплеты будут работать в Java-browser? С куками он умеет работать? JavaScriprt работает? Возможности HTML5 поддерживает? Это сообщение отредактировал(а) ZVano - 30.10.2015, 16:43 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
LSD |
|
|||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
Вопрос только в том какую использовать реализацию.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
LSD, спасибо.
Буду читать и щупать. Есть еще год до момента "П...ц" (извините за мой французский ) -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
Sajtran |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 15.10.2008 Где: Мегион Репутация: нет Всего: 2 |
мда, проблема действительно
доступ к локали компа всё больше обрывается через WEB плагинами только к кажому браузеру отдельно если и это не перекроют без вариантов, кроме как писать на старый добрый десктоп Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Внимание! Не тратьте время на тупиковую ветвь.
Этот подход не будет работать, если Ваш Web-ресурс (с которого запускается JNLP) находится под HTTPSом. Браузер будет блокировать все HTTP, HTTPS, WS и WSS запросы к ресурсу с self-signed сертификатом. Нормальный сертификат для localhost Вы не получите даже за деньги. Вы никак не обойдете это ограничение Т.е. Вы не сможете присоединиться из JAVA-script к локальному WebApi-сервису на Java. Правда, можно руками добавить сертификат в список доверенных в браузере - тогда будет работать (но это совсем не феншуйно). Если же Ваш Web-ресурс работает по HTTP, то подход работоспособен и весьма удобен в использовании. PS: Безусловно блокируются фоновые запросы (выводится ошибка в консоль браузера). Если же ссылку ввести в поле URL браузера, то он(браузер) выдаст страницу с предупреждением и даст возможность добавить сертификат в список доверенных. Это сообщение отредактировал(а) ZVano - 6.6.2016, 16:40 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
LSD |
|
||||
Leprechaun Software Developer Профиль Группа: Модератор Сообщений: 15709 Регистрация: 24.3.2004 Репутация: 19 Всего: 537 |
А кто мешает в hosts прописать
? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
ZVano |
|
|||
Опытный Профиль Группа: Участник Сообщений: 258 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: нет Всего: 4 |
Никто не мешает. Но это снова изменения руками. Причем нужно обладать соответствующими правами. Когда я писал "Вы никак не обойдете это ограничение" подразумевалось что решение не будет работать без ручного вмешательства. (Другое решение этой проблемы - написать в инструкции пользователя "Наберите в строке URL значение https://127.0.0.1:2016 и примите сертификат, который вам предложат со страшными предупреждениями") Представьте себе ситуацию - пользователям https://forum.vingrad.ru нужно добавить строчку в hosts чтобы зайти на сайт. Много было бы таких отважных? Причем тут собрались умные люди. Это сообщение отредактировал(а) ZVano - 7.6.2016, 14:39 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |