在 java webapp 中动态加载类的最佳方法



我正在设计一个java Web应用程序,该应用程序能够执行用户上传的自定义代码或预编译类,主要集中在数据集的简单验证上。自定义类必须约束到预定义的接口,并且只有某些库和类必须可用于自定义类。

我的第一个解决方案是使用能够从文件系统中定义的目录加载.jar文件的自定义类加载器。这种方法似乎有效,但我担心此解决方案的安全性和兼容性。

是否可以限制自定义类可以导入的类并在沙箱中运行代码以避免某些操作,例如打开文件或套接字?

何时卸载加载的类?

像 Weblogic 这样的应用程序服务器在使用自定义类加载器方面有一些限制?

我已经评估了另一种解决方案,如OSGi捆绑包,但它看起来非常复杂,并且在某些应用程序服务器中的支持有限,我也不确定OSGi是否是适合此特定用途的正确技术。像Groovy o Javascript这样的嵌入式脚本语言被丢弃,因为项目所有者希望用Java预编译和编写自定义代码。

对于这个问题,你会有什么建议?

OSGi非常适合希望接受外部代码(插件)的应用程序。您提到的所有需求(预定义接口、装入 jar、多个类加载器)都包含在 OSGi 服务和捆绑包管理中。可以安装、启动、停止、卸载捆绑包等,包括在运行时。

Web应用程序服务器中的OSGi支持并没有那么有限。你甚至可以考虑嵌入一个OSGi框架。

在安全方面,您将需要围绕安全管理器的解决方案。

相关内容

最新更新