执行 JNLP 文件会引发 AccessControlException
Posted
技术标签:
【中文标题】执行 JNLP 文件会引发 AccessControlException【英文标题】:Executing JNLP file throws a AccessControlException 【发布时间】:2013-04-02 12:24:00 【问题描述】:我正在尝试执行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 内容”选项,但它当我点击应用时被重置)。如下图所示:
是否有另一种机制可以绕过 Java 安全管理器并能够执行 jnlp 应用程序?
更新:
重新安装 Java 后,我终于能够更改 Java 控制面板中的安全选项(我没有做任何特别的事情,只是从头开始重新安装)。不幸的是,当我执行jnlp application 时,它会默默地死掉而没有显示任何错误。这个问题可能与我使用的是 jdk 1.8 相关(因为 jnlp 应用程序需要 javafx)并且它只是一个预览版本(而且 OSX 这些天似乎不太喜欢 Java ......),它是我最好的猜测,但我不能完全确定。
【问题讨论】:
使用 JaNeLA 工具检查文件 【参考方案1】:可能的原因:
-
听说 Mac 上的 Java 7 还不稳定。
默认情况下,JNLP 文件在“沙箱”中运行,以防止恶意代码对您的系统造成严重破坏。此沙箱限制对本地文件系统和本地网络的访问。我想系统属性也受到限制,看起来应用程序正在尝试写入它们。要允许不受限制的访问,您需要对 JAR 文件进行签名并使用
<security><all-permissions/></security>
配置 JNLP 文件
【讨论】:
以上是关于执行 JNLP 文件会引发 AccessControlException的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法