应该没有安全限制,因为applet是本地安装的。
但我得到了:
java.security.AccessControlException:拒绝访问(java.lang.RuntimePermission loadLibrary.jzmq)
当我的应用尝试调用
时static{
System.loadLibrary("jzmq");
}
是什么给出的? 在没有安全问题的情况下,我可以顺利地工作,因为它是用户安装的本地小程序,所以我应该错过什么?
顺便说一下,它可以在Eclipse“Run”中正常运行,而不是在我希望它运行的浏览器中。
答案 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;
};