0

クライアントから送信された JSON 情報を処理する Java バックエンド システムがあります。どのような処理を行うべきかを判断するために、「type」という JSON のフィールドを使用します。

私のバックエンド システムは「タイプ」をチェックし、タイプに基づいて特定の Java コードを実行します。

型をチェックして Java クラスにハードコーディングされたコードを実行する代わりに、外部データベースからコードを実行する方法を探ることに興味があります。このようにして、より多くの「タイプ」を作成したい場合、新しいチェックまたはクラスを Java ファイルにハードコーディングして再コンパイル/デプロイするのではなく、データベース内の各タイプを処理する方法を簡単に追加できます。

この StackOverFlow の投稿: Convert String to Codeを読みましたが、コメントが指摘しているように、任意のコードが実行されるだけで重大なリスクが伴います。

理想的には、JSON データのパラメーターを持つ Java メソッドを外部からロードして、独自のチェックと処理を行い、値を返すようにしたいと考えています。

これを行うための安全(やや)簡単な方法はありますか?おそらく、文字列を Java コードとして解析するのは正しい考えではありません (外部クラスの読み込みを行う方が賢明かもしれません)。

4

2 に答える 2

1

実行するコードが短い場合 (ワンライナー程度)、キーと値のペアとしてプログラムの構成に格納することができます。ここで、キーは JSON メッセージで見つかった型で、値は実行されるコードです。実行されました。Groovy でワンライナーをコンパイルすれば完了です。

実行するコードが長い場合は、インターフェイスを定義し、多数の実装を作成します。構成で、JSON の型をクラスに関連付けます。既知の名前でクラスをインスタンス化することは、Class.forName(...).newInstance()プラスのエラー処理です。これにより、プラグインを作成することもできます。クラスパスに新しい実装クラスを配置し、構成にエントリを追加して、アプリを再起動するだけです。おそらくSpringとBeanでこれを行うことができますが、単純なケースでは手動で行う方がおそらく簡単で高速です.

悪意のあるユーザーが構成や JAR を変更できないと想定しているため、これらのソリューションは安全です (そうしないと、すでに深刻な問題に直面していることになります)。

于 2012-05-16T16:51:10.773 に答える
1

ああ、古き良きソフトコーディング。このパスに進む前に、 http://thedailywtf.com/Articles/Soft_Coding.aspxを読むことをお勧めします。

実行時にコードを変更できることを主張する場合は、OSGi をチェックしてください。データベースの代わりに、更新されたコードを反映するように変更できる動的バンドルがあります。

于 2012-05-16T16:51:39.903 に答える