私は一連のサービスと、これらのサービスを呼び出す唯一の手段となるクライアント JAR ファイルに取り組んでいます。クライアント JAR は、複数のアプリケーション (すべて内部) によって使用されます。ただし、一部のクライアント アプリケーションでは一部のサービスを許可し、他のサービスでは許可しないようにしたいと考えています。
この目標を達成するためにさまざまなアプローチを試していますが、1 つのアプローチは、実行時に渡す「コンテキスト」値を各アプリケーションに与えることです。この値は、そのクライアント アプリケーションに許可されているサービスのリストを表し、サービスはそのリストに含まれているかどうかをすばやく計算できます。
各サービスには独自の ID 値があり、おそらくstatic final
変数として Java クラスにハードコードされています。クライアント アプリケーションごとに、Groovy スクリプトまたは非常に基本的な Web アプリを使用して、許可されるサービスのリストをまとめます。リフレクション ベースのコードでは、これらの ID 値をすべて収集し、それらすべてを表すハッシュを生成します。
この「コンテキスト」ハッシュをクライアント JAR とともにクライアント アプリケーションの所有者に渡すと、実行時にサービスを呼び出すときにそれが返されます。サービスは、同じ (または関連する) ハッシュ アルゴリズムを使用して、その ID がハッシュに含まれているかどうかをすばやく確認します。その場合、サービスは続行されます。そうでない場合は、例外をスローします。このアプローチでは明らかに意図的な悪用を防ぐことはできませんが、これらはすべて内部サービスであり、過失による誤用をブロックするだけで済みます。
どのハッシュ アルゴリズムを使用すればよいかわかりません (または、「ハッシュ」という言葉が適切かどうかもわかりません)。許可されたすべての ID を として収集しString
、後で特定の ID がその文字列に含まれているかどうかを確認できます。ただし、「コンテキスト」値は巨大で扱いにくくなります。値のリストをハッシュし、後で特定の生の値がそのリストに含まれているかどうかを確認するための標準的な数学的アプローチがあると確信しています。おそらく、すでに適切にパッケージ化され、Java の世界で公開されているものもあります。どんな提案でも大歓迎です!