Java:从LOCAL applet调用.dll ...我做错了什么

时间:2010-09-15 15:15:14

标签: java security dll applet local

应该没有安全限制,因为applet是本地安装的。

但我得到了:

java.security.AccessControlException:拒绝访问(java.lang.RuntimePermission loadLibrary.jzmq)

当我的应用尝试调用

static{
     System.loadLibrary("jzmq");
}

是什么给出的? 在没有安全问题的情况下,我可以顺利地工作,因为它是用户安装的本地小程序,所以我应该错过什么?

顺便说一下,它可以在Eclipse“Run”中正常运行,而不是在我希望它运行的浏览器中。

1 个答案:

答案 0 :(得分:2)

从本地文件系统(文件:///)通过浏览器插件运行的Applet与从Web加载的applet几乎完全相同的安全检查。不同之处在于从网络加载的小程序具有“回家”的权限,即。连接回applet发起的服务器,从文件系统加载的applet有权访问同一文件夹中的文件。

默认情况下,沙箱不允许在任何一种情况下加载本机库。

您可以考虑签署小程序。用户必须确定安全对话框。除非您拥有从证书颁发机构购买的代码签名证书,否则该对话框将警告用户它没有被可信方签名。

我没有完全理解您的用例,但如果您可以在本地计算机上运行其他代码,您可以随时更改java安全策略,以便信任某个特定本地位置的.jar文件。这样就不会出现安全对话框。

为此,您可以更改Java策略文件,该文件在具有Java 6的Windows机器上可能位于:

%PROGRAM FILES%\ Java \ jre6 \ lib \ security \ java.policy

并添加一个新权限,如下所示:

grant codeBase "file:///path/yourcomponent.jar" {
      permission java.lang.RuntimePermission "loadLibrary.jzmq";
};

编辑:要提供完全权限,您可以添加这样的权限(这是从我刚才做的成功测试中复制的):

grant codeBase "file:///C:/component/policytest.jar" {
      permission java.security.AllPermission;
};
相关问题