如何避免第三方lib加载二进制资源的混合代码警告?

时间:2012-01-17 20:58:49

标签: java applet classloader mixed-code

我正在制作一个巨大的小程序,装载100多个罐子,其中50个是第三方。所有这些都是签名和信任的。

不幸的是,一个openmap加载二进制文件(形状和图层文件)。我无法签署这些文件(AFAIK),因为它们不是罐子,没有清单等。

由于jar加载了二进制文件,因此运行时会收到混合代码警告。我唯一能想到的就是将每个.jar标记为“Trusted-Library:true”。更改所有.jars上的清单意味着必须重新签名所有.jars,这是一个政治问题。

我知道可以在java控制面板中禁用该对话框。我正在寻找另一种解决方法。天真地,我希望能够以某种方式标记openmap或我的jar,使用它来信任(或不需要)加载这些文件而不发出警告。我尝试将openmap作为可信库,但不能消除错误。如果我尝试使用openmap成为可信库的jar,那么我会遇到问题因为我的jar依赖于其他jar而我的jar中的类定义无法加载,因为这些依赖类在另一个类加载器中。

编辑:
这似乎触发了对话框(单击“是,阻止可能不安全”以获取此日志记录语句)

  

安全性:资源名称   “HTTP://本地主机:8080 /地图/ politicalWorld / vmap_political_world / vmap_area_thin.shp”   在http://localhost:8080/app/client-lib/:   java.lang.SecurityException:尝试加载受信任的加载程序   来自http://localhost:8080/app/client-lib/的沙盒资源

1 个答案:

答案 0 :(得分:2)

如果你把文件打到罐子里,签名并加载它们作为资源,那应该没问题。您可能无法通过代码库中的URL加载它们(因为它们无法与applet的一部分区分开来)。但是,如果您将它们移出代码库,请记住它们可能被恶意代替,因此无法信任它们。

我建议不要添加Trusted-Library: true,因为它几乎不可能是安全的。并不是说任何代码都是恶意的,但它不会被设计成安全地用作库。

同样禁用混合代码警告会打开客户端计算机以攻击混合代码警告应该缓解的情况。