为了账号安全,请及时绑定邮箱和手机立即绑定

javax.imageio.IIOException:无法在 Tomcat 9、OpenJDK 11

javax.imageio.IIOException:无法在 Tomcat 9、OpenJDK 11

炎炎设计 2022-07-20 12:23:19
处理javax.imageio.IIOException 时:无法创建 ImageInputStream!由于缺少FileImageInputStreamSpi提供程序而调用ImageIO.read(File file)后,我认识到我的 webapp 中可用的ImageIO服务提供程序取决于 Geoserver ( http://geoserver.org ) webapp 是否在同一个 Tomcat 中运行网络容器与否:只有我的 webapp 运行:从 RandomAccessFile 实例化 FileImageInputStream 的服务提供者从 File 实例化 FileImageInputStream 的服务提供者从 InputStream 实例化 FileCacheImageInputStream 或 MemoryCacheImageInputStream 的服务提供者我的 webapp 沿着 Geoserver 2.15.0 webapp 运行:NIO 通道 ImageInputStream包装 FileImageInputStream 的服务提供者帮助连接到字符串指向的对象的服务提供者帮助连接到 URL 指向的对象的服务提供者从 RandomAccessFile 实例化 FileImageInputStream 的服务提供者我的网络应用程序中的代码:IIORegistry reg = IIORegistry.getDefaultInstance();Iterator<ImageInputStreamSpi> it = reg.getServiceProviders(ImageInputStreamSpi.class, true);while (it.hasNext()) {    ImageInputStreamSpi spi = it.next();    System.out.println(spi.getDescription(Locale.GERMAN));}我正在使用 Tomcat 9.0.16 webapp 和 OpenJDK 11。我想知道为什么这两个 webapps 都可能以这种方式干扰 - 这实际上不是一个安全问题吗?感谢您的一般性澄清。
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

ImageIO这是和的一个已知问题IIORegistry。注册表实例在 VM 上的所有应用程序之间共享。这通常会导致问题,就像你的情况一样。

我在 TwelveMonkeys ImageIO 项目的自述文件中写了一些关于在 Web 应用程序中部署 ImageIO 插件的内容。使用上下文侦听器可能有助于解决一些问题,但它不能解决根本问题。

另一个解决方法是仅将 ImageIO 插件部署为服务器本身的一部分(即共享 lib 文件夹),以确保所有 Web 应用程序看到相同的插件。


如果您深入查看源代码,IIORegistry您会发现它实际上支持多个注册表,但这些都与AppContexts 相关联(由 applet、webstart 等使用),不幸的是,这与 Web 应用程序上下文不同。看起来确实应该可以使 web 上下文也具有不同AppContext的 s,只要它们使用不同ThreadGroup的 s。但我从未找到一种方法让应用服务器为每个 Web 应用程序上下文分配不同的线程组。


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号