.class目標は、アップロードされたファイルのメソッドを実行できる Web アプリケーションを実装することです。アップロードされたクラス ファイルは、byte[]. この.classファイルのパブリック クラスは、特定のインターフェイスを実装します。
アップロード後、メソッド(インターフェース実装)を呼び出したいと思います。
実行中のJavaアプリケーションでこれを行う方法はありますか? はいの場合、どのように?
ところで。私はセキュリティリスクを認識しています。
.class目標は、アップロードされたファイルのメソッドを実行できる Web アプリケーションを実装することです。アップロードされたクラス ファイルは、byte[]. この.classファイルのパブリック クラスは、特定のインターフェイスを実装します。
アップロード後、メソッド(インターフェース実装)を呼び出したいと思います。
実行中のJavaアプリケーションでこれを行う方法はありますか? はいの場合、どのように?
ところで。私はセキュリティリスクを認識しています。
難しすぎてはいけません:
ClassLoader#defineClass(String, byte[], int, int)ます。YourInterface.class.isAssignableFrom(loadedClass);)。Class<?>ます (例: YourInterface obj = (YourInterface)loadedClass.newInstance();)。obj.shinyMethod();独自のクラスローダーを再作成する: これは、システム クラス ローダーに委譲するだけの単純なものです。
class MyClassLoader extends ClassLoader {
public MyClassLoader() {
super(ClassLoader.getSystemClassLoader());
}
// Our custom public function for loading from a byte array,
// this is here just because defineClass is final, so we
// can't just make it public. Name can be anything you want.
public Class<?> loadClassFromByteArray(byte[] data)
throws ClassFormatError {
return this.defineClass(null, data, 0, data.length);
}
}