Java:从本地小程序调用.dll…我做错了
问题内容:
因为小程序是本地安装的,所以应该没有安全限制。
但是我得到:
java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission
loadLibrary.jzmq)
当我的应用尝试致电时
static{
System.loadLibrary("jzmq");
}
是什么赋予了?我想让它在没有安全问题的情况下顺利运行会丢失什么(因为它是用户安装的本地小程序,所以应该如此)?
顺便说一句,它可以从Eclipse“运行”中正常运行,只是不能在我希望它运行的浏览器中运行。
问题答案:
通过本地文件系统(file:///)的浏览器插件运行的Applet受到的安全检查与从Web上加载的Applet几乎完全相同。区别在于从Web加载的小程序具有“回拨”权限,即。连接回源于该小程序的服务器,以及从文件系统加载的小程序都有权访问同一文件夹中的文件。
默认情况下,沙盒在两种情况下均不允许加载本机库。
您可以考虑签署小程序。用户将必须单击“安全性”对话框。并且,除非您有从证书颁发机构购买的代码签名证书,否则该对话框将警告用户以下事实:该证书不是由受信任方签名的。
我不完全了解您的用例,但是如果您可以在本地计算机上运行其他代码,则可以始终更改Java安全策略,以便在某个特定的本地位置信任.jar文件。这样就不会出现安全对话框。
为此,您可以更改Java策略文件,该文件在具有Java 6的Windows计算机上可能位于:
%程序文件%\ 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;
};