【问题标题】:Java jnlp application blocked by Security settingsJava jnlp 应用程序被安全设置阻止
【发布时间】:2014-01-24 22:06:22
【问题描述】:

我有一个企业 java 应用程序,它有很多 jars,这些 jars 通过 jnlp 文件下载到客户端的 jvm 缓存中。当我启动应用程序时,我在 Java 控制台上得到以下堆栈跟踪:

        Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.sun.deploy.ui.DialogTemplate.imageAvailable(Unknown Source)
at com.sun.deploy.ui.DialogTemplate.finalImageAvailable(Unknown Source)
at com.sun.deploy.ui.ImageLoader$2.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
       Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.sun.deploy.ui.DialogTemplate.imageAvailable(Unknown Source)
at com.sun.deploy.ui.DialogTemplate.finalImageAvailable(Unknown Source)
at com.sun.deploy.ui.ImageLoader$2.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
    #### Java Web Start Error:
    #### The Java security settings have prevented this application from running. You may change this behavior in the Java Control Panel.

我的 JNLP 文件如下所示,带有一些被删减的描述:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://10.100.10.9/ikarusdelhitest/" href="ikarus.jnlp">
<information>
    <title>ikarus</title>
    <vendor>my company</vendor>
    <homepage href="http://www.mycompanyaddress.com" />
    <description>My enterprise java ee swing application</description>
    <icon href="ikarus.jpg" />
    <offline-allowed />
</information>
<security>
    <all-permissions />
</security> 
<resources> 
    <jar href="jars/ikarus/ikarusClient.jar" />
    <jar href="jars/ikarus/ikarusDelegators.jar" />
    <jar href="jars/ikarus/clientRules.jar" />
    <jar href="jars/ikarus/ruleImps.jar" />
    <jar href="jars/ikarus/ikarusUtil.jar" />
    <jar href="jars/ikarus/ikarusResources.jar" />
    <jar href="jars/ikarus/domain.jar" />
    <jar href="jars/ikarus/domain_repository.jar" />
    <jar href="jars/ikarus/domain_service.jar" />
    <jar href="jars/ikarus/app_repository.jar" />
    <jar href="jars/ikarus/app_service.jar" />
    <jar href="jars/ikarus/infrastructure.jar" />
    <jar href="jars/ikarus/integration_domain.jar" />
    <jar href="jars/jboss_ejb_auth/ejb3-persistence.jar" />
    <jar href="jars/jboss_ejb_auth/jboss-ejb3x.jar" />
    <jar href="jars/jboss_ejb_auth/jbossall-client.jar" />
    <jar href="jars/jasper/commons-beanutils-1.8.0.jar" />
    <jar href="jars/jasper/commons-collections-3.2.1.jar" />
    <jar href="jars/jasper/commons-digester-1.7.jar" />
    <jar href="jars/jasper/commons-logging-1.1.jar" />
    <jar href="jars/jasper/iText-2.1.0.jar" />
    <jar href="jars/jasper/jasperreports-3.6.0.jar" />
    <jar href="jars/jasper/poi-3.2-FINAL-20081019.jar" />
    <property name="jnlp.localization" value="Delhi"/>
</resources>
<application-desc main-class="com.celebi.ikarus.main.Ikarus" />

另请注意,我在更多信息面板上获得了一些不同的异常详细信息:

com.sun.deploy.security.BlockedException: The Java security settings have prevented this application from running. You may change this behavior in the Java Control Panel.
at com.sun.deploy.security.SandboxSecurity.showBlockedDialog(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.AppPolicy.addPermissions(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.getTrustedCodeSources(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.strategy(Unknown Source)
at com.sun.deploy.security.CPCallbackHandler$ParentCallback.openClassPathElement(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.SecurityException: Invalid Permissions value: all-permissions  
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
... 39 more

我对 java 控制面板的安全性没有任何安全限制。处于中等水平如下:

感谢您的帮助

新编辑:当我尝试从 jvm 1.6 机器运行此 jnlp 时,我得到了更多解释性堆栈跟踪,如下所示:

java.lang.NoClassDefFoundError: javax/ejb/EJBAccessException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.ejb.EJBAccessException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

【问题讨论】:

  • java.lang.SecurityException: Invalid Permissions value: all-permissions 是否映射到 jnlp 文件或我在 jar 中的清单文件?
  • 嗯.. 你又让我吃惊了。我完全期望添加all-permissions 可以解决应用程序的下一个问题。面对。我会考虑的。。
  • 可以将 jnlp 文件中的 和清单文件中的 Permissions: all-permissions 行矛盾的?这可能吗?哪个优先于另一个?
  • 不,他们应该是一致的。

标签: java security certificate java-web-start jnlp


【解决方案1】:

Arch Linux 系统上,我发现 Java 控制面板 可以通过 /opt/java7/jre/bin/ControlPaneljcontrol 的符号链接)访问。通过运行它,我能够访问 Security 选项卡,然后将安全级别调低到 Medium。然后,在启动 /opt/java7/bin/javaws 之类的内容时,系统会提示我接受安全警告。

【讨论】:

    【解决方案2】:

    您也可以尝试启用 java 高级选项卡下的复选框(在控制面板中)并选中 JNLP 文件部分下的始终允许选项

    【讨论】:

      【解决方案3】:

      我尝试添加项目 file:/ 并工作。

      【讨论】:

        【解决方案4】:

        我们在 Java 1.8u60 中看到了这个问题,该问题是由于对 JNLP 文件中的图标的死引用引起的。以前缺少的图标被忽略,但现在我们看到问题中的堆栈跟踪失败。删除对图标的引用解决了我们的问题。

        以下是我们删除的两个引用:

        <icon href="ORCL.jpg" kind="splash"/>
        <icon href="ORCS.jpg" kind="default"/>
        

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          我通过进入 Java 控制面板(开始菜单 > 所有程序 > Java > 配置 Java)并将两个 URL 添加到安全编辑站点列表来解决此问题。

          http://code.google.com

          http://androidscreencast.googlecode.com

          对于 Mac 系统偏好设置 > Java

          在哪里添加这些网站

          Java 控制面板 > 安全选项卡 > 编辑站点列表 > 添加 > 应用 > 确定

          【讨论】:

            【解决方案6】:

            我建议您启用跟踪和日志记录,请参阅此处:

            然后从命令行运行应用程序。

            javaws -verbose AppName.jnlp
            

            然后你可以在这个路径下的日志和跟踪文件中检查线索

            \Documents and Settings\<USERNAME>\Application Data\Sun\Java\Deployment\log
            

            图片来源:

            http://www.cisco.com/c/en/us/support/docs/security/hostscan/117097-trouble-java7-00.html

            【讨论】:

            • 对于那些感兴趣的人来说,Windows 10 上的等效目录是 C:\Users\\AppData\LocalLow\Sun\Java\Deployment
            【解决方案7】:

            我有一个非常相似的问题 (Correctly signed JNLP application prevented from running in Java 7)

            我通过确保修复它

            • 我使用 1.7 编译
            • 我更新了我的 JNLP 文件以强制执行 1.7


            【讨论】:

            • 它认为这对 ejb 的异常没有影响。我在 jnlp (
            • 好吧,如果您拥有源代码,那就太好了。我只是想运行别人开发的东西。
            • 谢谢,这为我解决了 com.sun.deploy.ui.DialogTemplate.imageAvailable(Unknown Source) 处的 java.lang.NullPointerException。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-23
            相关资源
            最近更新 更多