执行JNLP文件会抛出AccessControlException

时间:2013-04-02 12:24:01

标签: java security jnlp securitymanager

我正在尝试执行this jnlp应用程序。 但是,我一直收到这个安全例外:

java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:399)
    at java.lang.Class.newInstance0(Class.java:370)
    at java.lang.Class.newInstance(Class.java:322)
    at com.sun.javafx.applet.FXApplet2.init(FXApplet2.java:63)
    at com.sun.deploy.uitoolkit.impl.fx.FXApplet2Adapter.init(FXApplet2Adapter.java:207)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.net.useSystemProxies" "write")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:364)
    at java.security.AccessController.checkPermission(AccessController.java:560)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.System.setProperty(System.java:783)
    at ensemble.Ensemble2.<clinit>(Ensemble2.java:77)
    ... 10 more

我尝试更改Java控制面板(OSX 10.8.3)中的安全设置,但它们似乎已禁用,我无法修改它们(我可以检查“在浏览器中启用Java内容”选项,但它单击“应用”时重置。如下图所示:

Security tab in the Java Control Panel

是否存在绕过Java安全管理器并能够执行jnlp应用程序的另一种机制?

更新

重新安装Java后,我终于能够更改Java控制面板中的安全选项(我没有做任何特别的事情,只是从头开始重新安装)。不幸的是,当我执行jnlp application时,它会在没有显示任何错误的情况下静静地死掉。这个问题可能与我使用jdk 1.8(因为jnlp应用程序需要javafx)这个事实有关,而且它只是一个预览版本(而OSX似乎现在看起来并不像Java那么多......),它是我最好的猜测,但我不能完全确定。

1 个答案:

答案 0 :(得分:0)

可能的原因:

  1. 我听说Mac上的Java 7仍然不稳定。
  2. 默认情况下,JNLP文件在“沙箱”中运行,以防止恶意代码对您的系统造成严重破坏。此沙箱限制对本地文件系统和本地网络的访问。我想系统属性也受到限制,看起来应用程序试图写入它们。要允许不受限制的访问,您需要签署JAR文件并使用<security><all-permissions/></security>
  3. 配置JNLP文件