Недавно нам пришлось обновить Java JRE до 1.8.0_201 для старого веб-приложения с использованием единого подписанного апплета. С тех пор при запуске апплета "Вы хотите запустить это приложение?" Во всплывающем окне отображается подробная информация: «Это приложение будет работать с неограниченным доступом, что может поставить под угрозу ваш компьютер и личную информацию. Запустите это приложение, если вы доверяете расположению и издателю, указанному выше».
Согласно этой статье oracle это вызвано тем, что манифест не содержит атрибута Permissions. Проверка показывает, что MANIFEST.MF содержит атрибут.
Manifest-Version: 1.0
Application-Name: MyApplet
Implementation-Title: My Applet
Svn-Url:
Job-Name:
Implementation-Version: 3.12.0-SNAPSHOT
Build-Number:
Archiver-Version: Plexus Archiver
Built-By: username
Implementation-Vendor-Id: nl.myorg.myapplet
Application-Library-Allowable-Codebase: *.myorg.nl
localhost
127.0.0.1
Implementation-Vendor: My Organisation
Build-Tag: 3.12.0-SNAPSHOT
Caller-Allowable-Codebase: *.myorg.nl localhost 127.0.0.1
Permissions: sandbox
Codebase: *.myorg.nl localhost 127.0.0.1
Svn-Revision-LastChange:
Created-By: Apache Maven 3.1.1
Build-Jdk: 1.8.0_171
Svn-Revision:
Я думаю, что эта проблема связана с Java-апплетом и веб-запуском - подписывание кода . Поэтому я попытался запустить апплет в песочнице, чтобы запретить запрашивать у пользователей полные разрешения.
Я добавил запись <Permissions>sandbox</Permissions>
в манифест апплетов.
Изменены настройки безопасности в апплетах jnlp с
<security>
<all-permissions/>
</security>
до
<security>
<j2ee-application-client-permissions />
</security>
И добавил <PARAM name=permissions value=sandbox>
к <applet></applet>
.
После внесения этих изменений появляется всплывающее окно с «ExitException: настройки безопасности Java не позволяют этому приложению работать. Вы можете изменить это поведение в Панели управления Java. '.
Консоль Java дает некоторые дополнительные сведения;
cache: Create from verifier: JarSigningData{hasOnlySignedEntries=true, hasSingleCodeSource=true, hasMissingSignedEntries=false}
java.lang.SecurityException: JAR manifest requested to run in sandbox only: http://localhost:8080/MyApplet/static/3.12.0-SNAPSHOT/applets/MyApplet.jar
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
basic: The Java security settings have prevented this application from running. You may change this behavior in the Java Control Panel.
basic: Dialog type is not candidate for embedding
Поскольку DeployManifestChecker.verify выдает исключение, может ли быть ошибка в файле jnlp? Если да, то как определить, что не так?