【问题标题】:Existing apis/libraries to compile/run java code?现有的 apis/libraries 来编译/运行 java 代码?
【发布时间】:2021-12-13 11:36:58
【问题描述】:

我正在尝试将 java 脚本选项添加到我的 Web 应用程序,并满足以下要求:

1-用户编写自定义java代码。

2-用户可以编译/运行这段代码。

3-用户可以上传 jars 并在他的代码中使用它们(不使用自定义类加载器/反射)。

通过覆盖 java 类加载器,我设法实现了前 2 个要求。 但是,对于第三个要求,我不确定如何进行。

我想知道是否有办法使用现有的 api 来处理这个问题,或者任何离线的 java 代码编译器来执行这个自定义代码:

输入:java代码+依赖jars->输出:代码执行

【问题讨论】:

标签: java classloader


【解决方案1】:

如果不创建新的ClassLoader 实例,就无法从用户那里动态加载其他 JAR。但它不一定是ClassLoader 的自定义子类。

一般的想法是您创建一个(比如说)URLClassLoader 的新实例,为(比如说)用户 JAR 的本地副本提供 URL。这个新的类加载器通常会将应用程序的类加载器作为其父类加载器。然后你会使用新的类加载器来加载用户的类;即您想要使用的那些。您需要反射来创建这些类的实例,然后您可以将它们转换为应用程序代码库中的接口,并按照普通类调用它们的方法。

离线编译无济于事。您需要解决的问题是让您的应用程序>>加载


警告:你提议做的事情听起来相当危险。您无法真正控制用户将要放入 Java 源代码或 JAR 中的代码。它可能会做各种恶意行为:读取/写入服务器文件、泄露机密或机密数据、挖掘比特币、导致服务器参与 DDOS。或者只是做一些令人讨厌和破坏性的事情。

该潜在的恶意编码器将在您的 web 应用程序中运行在您的服务器上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多