開発者がカスタムGroovyスクリプトとフリーマークテンプレートをアップロードできるようにするシステムを開発しています。サンドボックスJava/Groovy/Freemarkerコード - 特定のメソッドの実行を防ぐ
デフォルトのJavaセキュリティインフラストラクチャで、あるレベルのセキュリティを非常に高いレベルで提供できます。つまり、コードがファイルシステムやネットワークにアクセスできないようにすることができますが、特定のメソッドへのアクセスを制限する必要があります。
私の計画は、特定のメソッドをホワイトリストまたはブラックリストにするアノテーションを読み込むようにGroovyとFreemarkerのランタイムを変更することでしたが、コードのフォークバージョンを維持する必要がありました。
私が本質的に必要とするのは、GroovyまたはFreemarkerから呼び出されたときに特定のメソッドの実行を妨げることだけです。私はコールスタックを見るハックを考えましたが、これは大量のスピードヒットになります(それはかなり乱雑です)。
誰でもこれを実装するための他のアイデアはありますか?
多くの(ほとんどの)ケースでは、メソッドのクラスはコンパイル時に認識されないため、ASTの解析は実際には機能しません。それでも、これが最善の答えですので、私はこれに目を向けるでしょう。 メタクラスを使用してまともなソリューションを見つけるのをやめました。 –