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

java webapp中动态类加载的最佳方法?,java,web-applications,weblogic,classloader,Java,Web Applications,Weblogic,Classloader,我正在设计一个java web应用程序,它能够执行用户上传的自定义代码或预编译类,主要关注数据集的简单验证。 自定义类必须约束到预定义的接口,并且自定义类只能使用某些库和类 我的第一个解决方案是使用定制的类加载器,它能够从文件系统中定义的目录加载.jar文件。这种方法似乎有效,但我担心这个解决方案的安全性和兼容性 是否可以限制自定义类可以导入的类并在沙箱中运行代码,以避免打开文件或套接字之类的操作 何时卸载加载的类 像Weblogic这样的应用服务器在使用自定义类加载器方面有一些限制吗 我评估了

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

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

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

何时卸载加载的类

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

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


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

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

web应用程序服务器中的OSGi支持不可用。您甚至可以考虑使用OSGi框架


在安全方面,您需要一个解决方案。

大多数外部代码都是一个或两个类。建议使用多个类创建捆绑包,或者只使用一个类创建捆绑包是可以的?每个捆绑包有多少个类并不重要。OSGi指南通常会建议您将接口放在一个包中,将实现放在其他包中。