2015-03-05 7 views
2

У нас есть приложение Swing, которое загружается через Java Web Start и запускается на локальном компьютере. Но после автоматического запуска загруженного файла JNLP происходит ошибка:java.lang.SecurityException: манифест JAR запрашивается только для всех разрешений

Application Заблокировано Параметры безопасности Имя: SomeName Адрес: http://localhost:8080 Параметры безопасности Java предотвратить это запуск приложения. Это можно изменить в панели управления Java .

Этот URL-адрес уже добавлен в список исключений.

Java консоль не работает в данный момент, но если запуск этого JNLP файла командой в консоли:

javaws -verbose filename.jnlp 

мы получили некоторое исключение в след:

java.lang.SecurityException: JAR manifest requested to run in all-permissons only: http://localhost:8080/path/to/jar/jarname.jar 
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source) 
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source) 
    at com.sun.deploy.security.SandboxSecurity.isPermissionGranted(Unknown Source) 
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source) 
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source) 
    at com.sun.javaws.Launcher.prepareResources(Unknown Source) 
    at com.sun.javaws.Launcher.prepareAllResources(Unknown Source) 
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) 
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) 
    at com.sun.javaws.Launcher.launch(Unknown Source) 
    at com.sun.javaws.Main.launchApp(Unknown Source) 
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source) 
    at com.sun.javaws.Main.access$000(Unknown Source) 
    at com.sun.javaws.Main$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

манифеста этого Jar файл:

Manifest-Version: 1.0 
version-time: 1926 
version-number: 01.030.02.02 
Ant-Version: Apache Ant 1.9.4 
Application-Name: Somename 
Permissions: all-permissions 
version-date: March 4 2015 
Created-By: 1.7.0_75-b13 (Oracle Corporation) 
debug: on 
Codebase: * 

Структура JNLP файла:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="http://localhost:8080/" href="/warname/jnlp/filename.jsp"> 
    <information> 
     <title>Title</title> 
     <vendor>Company</vendor> 
     <homepage href="http://www.foo.com"/> 
     <description>Description</description> 
     <offline-allowed/> 
    </information> 
    <resources> 

     <j2se max-heap-size="512m" initial-heap-size="128m" 
       version="1.3+"/> 

     <jar href="/warname/jnlp/lib/jarname.jar"/> 
     <jar href="/warname/jnlp/lib/jarname-2.jar" /> 

     <extension href="/warname/jnlp/help.jsp" name="Java Help"/> 
    </resources> 
    <application-desc 
      main-class="path.to.class.Starter"> 
     <argument>-java.naming.provider.url=someurl</argument> 
     <argument>-java.naming.factory.initial=someinitial</argument> 
     <argument>-java.naming.security.principal=login</argument> 
     <argument>-java.naming.security.credentials=password</argument> 
     <argument>-locatorConfig=server</argument> 
     <argument>-verbose</argument> 
    </application-desc> 
</jnlp> 

Версия Java: 1.7.0_75.

В чем причина этого исключения и почему приложение не запускается?

+1

Что вы думаете? – immibis

ответ

4

Параметр «all-permissions» означает, что приложение должно получить доступ к некоторым системным ресурсам.

В этом случае Oracle говорит, что вы должны определить одинаковое разрешение как в JNLP, так и в файлах манифеста. Вы должны взглянуть на элемент «безопасности» из JNLP файла:

<security> 
    <all-permissions/> 
</security> 

Вы можете найти подробную информацию here.

Возможно, вам придется изменить настройки безопасности Java. В Windows у вас должен быть значок на панели управления для Java. Что касается Linux, вы можете запустить приложение «ControlPanel» в каталоге bin вашего JDK.

На вкладке «Безопасность» вы можете добавить исключение из «localhost». Это должно помочь вам исправить вашу проблему.

+0

В чем причина того, что приложение нуждается в доступе к переменным среды? –

+0

@MarkusKull Я неправильно читаю тему Oracle. В нем говорится о «системных ресурсах». –

+0

Если я правильно понимаю ваши советы, в старой версии JNLP-файла были найдены строки . Результат был тот же. –