2012-02-23 8 views
2

いくつかの重要なプロパティを持つEclipse RCPアプリケーションがあります。プロパティは、ユーザーが入力した秘密キーに基づいて暗号化されます。バンドル/プラグインは、プロパティーとそれらを暗号化する必要があるかどうかを定義します。そのトリックはこれです:プロパティを定義するバンドルは、(デフォルトで)復号化されたそのプロパティにアクセスすることが許可されている唯一のバンドルでなければなりません。通常、各バンドルには独自に管理されているプロパティが必要ですが、集中管理された場所からプロパティが取得されるため、これは不可能です。Eclipse RCPのメソッドへのアクセスをバンドルで制限する

public byte[] getByteArrayProperty(Object id){ 
if (method is being called by code in bundle: bundleId) 
    return decrypt(property); 
else 
    throw new SecurityException("Bundle " + bundleId + " not authorized to access property " + id); 
} 

任意およびすべての提案をありがとう:

すなわち、どのように私はこれを行うことができます!

./P

+1

呼び出し元のバンドルのIDを使用してプロパティを格納/取得する 'storeProperty(password)'や 'getProperties(password)'などのメソッドを提供するサービス(例えば 'PropertyRepository')店の鍵として?その後、各バンドルは、一意のパスワード(ランダムハッシュ?)を生成する必要があります。これは、格納/検索に使用します。必要に応じて、関連するバンドルのコレクション全体にわたってパスワードをハードコードすることができます。 – drozzy

+0

悪意のあるわけではありませんが、パスワードを見つけるためのソースコードを読んでいる人はいらっしゃいますか。 – Phaedrus

+2

セキュリティを有効にして、その特定のバンドルだけに許可を与えることはどうですか?これにより、パスワードを取り除くことさえできます。セキュリティに関するいくつかのプレゼンテーション(ただし、osgi仕様には詳細があります):http://felix.apache.org/site/presentations.data/Building%20Secure%20OSGi%20Applications%20Workshop.pdf – drozzy

答えて

1

あなたはthis answerで説明したように、呼び出し元のクラスを識別して、呼び出し元のクラスのパッケージはあなたのバンドルパッケージ(複数可)と同じであるかどうかを確認するためにSecurityManagerを使用することができます。

+0

このアプローチに問題があります。私は呼び出し元クラスのclassNameを取得できますが、classNameからそのバンドルを取得する方法はないようです。 Class.forName(className)は、パッケージAのClassLoaderが明示的にインポートされない限り、パッケージBのクラスについてはわかりません。 – Phaedrus

+0

バンドルの名前がパッケージと同じでない場合は、[この質問](http://stackoverflow.com/questions/785588/)で説明されているようにバンドルの内容を照会する必要があります。 – Cebence

関連する問題