У меня есть серьезная проблема с Java Web Start, что я не могу опустить голову. Ситуация такова: у меня есть приложение JavaFX, написанное Java8, которое я хочу развернуть с помощью Java WebStart. До недавнего времени я использовал HTTP для связи с сервером, и все работало нормально. Я мог бы развернуть приложение, используя веб-запуск, встроенный в браузер или как отдельное приложение.Как предоставить зависимый lib в файле jnlp все разрешения?
Однако я изменил связь с использованием WebSockets. Для этого в настоящее время я использую реализацию tyrus. И теперь возникает проблема: Так как я добавил Тире LIB, я всегда получаю AccessControlException когда Тир пытается получить доступ к системным свойством:
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "weblogic.websocket.client.max-aio-threads" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source) ~[na:1.8.0_25]
at java.security.AccessController.checkPermission(Unknown Source) ~[na:1.8.0_25]
at java.lang.SecurityManager.checkPermission(Unknown Source) ~[na:1.8.0_25]
at sun.plugin2.applet.FXAppletSecurityManager.checkPermission(Unknown Source) ~[na:na]
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) ~[na:1.8.0_25]
at java.lang.System.getProperty(Unknown Source) ~[na:1.8.0_25]
at org.glassfish.tyrus.container.jdk.client.JdkClientContainer.openClientSocket(JdkClientContainer.java:106) ~[na:na]
Однако я могу легко получить доступ именно это свойство любого из моих собственных классов, например если я это сделаю
logger.info(System.setProperty(ClientManager.WLS_MAX_THREADS, "1"));
logger.info(System.getProperty(ClientManager.WLS_MAX_THREADS));
Я получаю ожидаемый результат без проблем с безопасностью.
Конечно, я уверен, что все банки полностью подписаны, все банки имеют флаг в файлах Manifest.MF, а у jnlp есть нужный тег <security><all-permissions /></security>
.
Помимо этого я также попытался использовать реализацию websocket для причала, однако это дало мне точно такие же проблемы.
У кого-нибудь есть идея, почему код tyrus не может получить доступ к тому же системному свойству, что и основной код?
Существуют системные свойства для установки трассировки отладки на контроллере доступа (забудьте, что они находятся вне руки). Установка глобального состояния в общей виртуальной машине - плохая идея (очевидно). Некоторые случаи запрещены, если процесс не развязан. (О, и подпись не обязательно означает, что вы полностью доверяете.) –
Я просто попробовал это, и он (приложение JavaFX, использующее клиентские библиотеки веб-сокетов Tyrus под управлением Web Start) отлично справился со мной (см. [Github project] (https://github.com/jewelsea/javafx-websocket-test)). Я использовал плагин JavaFX maven для создания и (самостоятельного) подписывания приложения и требуемых банок со всеми разрешениями. – jewelsea