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

标签 java applet classloader mixed-code

我正在开发一个巨大的小程序,加载超过 100 个 jar,其中 50 个是第三方的。所有这些都经过签名和信任。

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

由于 jar 加载二进制文件,我在运行时收到混合代码警告。我想出的唯一避免这种情况的方法是将每个 .jar 标记为“Trusted-Library: true”。更改所有 .jars 上的 list 意味着必须重新签署所有 .jars,这是一个政治问题。

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

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

security: resource name "http://localhost:8080/maps/politicalWorld/vmap_political_world/vmap_area_thin.shp" in http://localhost:8080/app/client-lib/ : java.lang.SecurityException: trusted loader attempted to load sandboxed resource from http://localhost:8080/app/client-lib/

最佳答案

如果您将文件打包到 jars 中,将它们签名并作为资源加载,那应该没问题。通过代码库中的 URL 加载它们可能会遇到问题(因为它们变得无法与小程序的一部分区分开来)。但是,如果您将它们移出代码库,请记住它们可能会被恶意软件取代,因此它们不可信任。

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

同时禁用混合代码警告会使客户端机器受到混合代码警告本应减轻的攻击。<​​/p>

关于java - 如何避免第三方库加载二进制资源的混合代码警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901664/

相关文章:

java - ClassCastExceptions 由于在 WebSphere 8.5.5 应用程序容器中升级到 hibernate 4.2.8

java - 如何停止或暂停 Canvas 上的绘图

java - Apache commons-lang StringEscapeUtils 不转义 XML

java - 在java applets中绘制图像时出现的问题

Web Applett 中的 Java MSCAPI 错误?

java - ClassLoader加载的两个类,不能互相调用

java - Crystal 报表在查看器中工作,在日期范围的应用程序中不起作用

java - 为什么这个 Java 正则表达式不起作用?

java - PHP 站点和 Java 小程序之间的桥梁

java - 如何将 JDK6 ToolProvider 和 JavaCompiler 与上下文类加载器一起使用?