3

私は一連のサービスと、これらのサービスを呼び出す唯一の手段となるクライアント JAR ファイルに取り組んでいます。クライアント JAR は、複数のアプリケーション (すべて内部) によって使用されます。ただし、一部のクライアント アプリケーションでは一部のサービスを許可し、他のサービスでは許可しないようにしたいと考えています。

この目標を達成するためにさまざまなアプローチを試していますが、1 つのアプローチは、実行時に渡す「コンテキスト」値を各アプリケーションに与えることです。この値は、そのクライアント アプリケーションに許可されているサービスのリストを表し、サービスはそのリストに含まれているかどうかをすばやく計算できます。

各サービスには独自の ID 値があり、おそらくstatic final変数として Java クラスにハードコードされています。クライアント アプリケーションごとに、Groovy スクリプトまたは非常に基本的な Web アプリを使用して、許可されるサービスのリストをまとめます。リフレクション ベースのコードでは、これらの ID 値をすべて収集し、それらすべてを表すハッシュを生成します。

この「コンテキスト」ハッシュをクライアント JAR とともにクライアント アプリケーションの所有者に渡すと、実行時にサービスを呼び出すときにそれが返されます。サービスは、同じ (または関連する) ハッシュ アルゴリズムを使用して、その ID がハッシュに含まれているかどうかをすばやく確認します。その場合、サービスは続行されます。そうでない場合は、例外をスローします。このアプローチでは明らかに意図的な悪用を防ぐことはできませんが、これらはすべて内部サービスであり、過失による誤用をブロックするだけで済みます。

どのハッシュ アルゴリズムを使用すればよいかわかりません (または、「ハッシュ」という言葉が適切かどうかもわかりません)。許可されたすべての ID を として収集しString、後で特定の ID がその文字列に含まれているかどうかを確認できます。ただし、「コンテキスト」値は巨大で扱いにくくなります。値のリストをハッシュし、後で特定の生の値がそのリストに含まれているかどうかを確認するための標準的な数学的アプローチがあると確信しています。おそらく、すでに適切にパッケージ化され、Java の世界で公開されているものもあります。どんな提案でも大歓迎です!

4

4 に答える 4

0

ハッシュテーブルを使用できます。標準ライブラリにもあると思います。

于 2013-01-23T17:42:33.647 に答える
0

受け取る予定の ID の制限は何ですか?

ハッシュ テーブルを使用する必要がありますが、これらの ID が (システムのメモリに関連して) 比較的小さな境界内にある場合は、最も簡単なハッシュ テーブルを作成できます。

これらの ID が n および n+m の範囲内にある場合、サイズ m の配列を作成し、各要素を FALSE に設定します。追加する ID ごとに、array[ID - n] を TRUE に設定します。ID が渡されたかどうかを確認するには、(array[ID - n]) を確認します。

于 2013-01-23T21:02:49.340 に答える
0

権限を実装し、必要な権限を持つアプリケーションのみを許可することをお勧めします。

詳細については、android の許可に関する詳細トピックをお読みください。

http://developer.android.com/guide/topics/security/permissions.html

于 2013-01-23T16:43:14.033 に答える
0

あなたが見ているのは、圧縮されたフラット ファイル/XML をサービスに渡すことだと思います。サービスはファイルの内容を (解凍後に) に読み込み、そのIDが に存在HashSetするかどうかをチェックします。HashSet

于 2013-01-23T17:41:14.123 に答える