Подписанный апплет с подписанным шаблоном JNLP создает java.lang.SecurityException

Я подписываю файл JNLP, используемый моим RIA, в рамках подготовки к грядущему усилению безопасности ограничений в 7u51, в январе. Версия для веб-запуска работает отлично, но я столкнулся с проблемой, когда версия апплета не запускается со следующим исключением.

Google, по-видимому, никогда не слышал об этом исключении. :(

java.lang.SecurityException: JAR should not contain JNLP-INF/APPLICATION_TEMPLATE.JNLP
        at sun.plugin2.applet.Applet2ClassLoader.getPermissions(Unknown Source)
        at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at sun.plugin2.applet.Plugin2ClassLoader.defineClassHelper(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.access$100(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
        at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
        at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:744)

person Matt McHenry    schedule 06.12.2013    source источник


Ответы (1)


Проблема заключалась в том, что апплет не развертывался как апплет JNLP. В 7u25 было введено исправление безопасности, предназначенное для предотвращения повторного использования апплета JNLP с помощью устаревшего механизма развертывания тега <applet/>. Это исключение указывает на то, что это исправление безопасности было отключено.

Обходной путь заключается в том, чтобы либо всегда развертывать апплеты как апплеты JNLP, либо использовать другой вариант файла JAR, который не содержит каталог JNLP-INF.

Обратите внимание, что вы также можете увидеть этот вариант, если вы подписываете сам JNLP, а не шаблон:

java.lang.SecurityException: JAR should not contain JNLP-INF/APPLICATION.JNLP
person Matt McHenry    schedule 06.12.2013