2012-02-23 30 views
2

我有一個Eclipse RCP應用程序,其中包含一些敏感屬性。這些屬性將根據用戶輸入的密鑰進行加密。 Bundles/Plug-ins定義屬性,以及它們是否應該被加密。技巧是這樣的:定義屬性的bundle應該是唯一被允許訪問解密屬性的bundle(默認)。我明白,通常每個捆綁應該有自己的屬性獨立管理,但這是不可能的,因爲屬性是從集中位置檢索的。通過捆綁包限制對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

爲什麼不能有一個服務(例如'PropertyRepository'),它將提供一個方法,比如'storeProperty(password)'和'getProperties(password)',它們將通過使用調用bundle的id來存儲/檢索屬性作爲商店的關鍵?那麼每個bundle只需要生成一個唯一的密碼(隨機散列?),它將用來存儲/檢索。如果你願意 - 你可以在一系列相關軟件包中硬編碼密碼。 – drozzy 2012-02-23 18:41:04

+0

不是一個壞主意,但任何人都可以閱讀源代碼來找到密碼 – Phaedrus 2012-02-23 20:00:00

+2

好吧,如何打開安全性,並只允許那些特定的捆綁權限來打這個電話?這甚至會擺脫密碼。關於安全性的一些介紹(但是osgi規範有更詳細的介紹):http://felix.apache.org/site/presentations.data/Building%20Secure%20OSGi%20Applications%20Workshop.pdf – drozzy 2012-02-23 20:07:55

回答

1

你可以使用一個SecurityManager來識別呼叫類爲this answer解釋,然後檢查是否調用類的包是一樣的捆綁包(一個或多個)。

+0

這種方法存在問題。我可以獲得調用類的className,但似乎沒有辦法從className獲取該包。 Class.forName(className)失敗,因爲程序包A中的ClassLoader不知道程序包B中的類,除非它們被明確導入,這是我不能做到的。 – Phaedrus 2012-04-18 14:55:02

+0

如果捆綁軟件包的命名方式與軟件包的命名方式不同,那麼您必須按照[此問題](http://stackoverflow.com/questions/785588/)中所述的方式查詢捆綁軟件包的內容。 – Cebence 2012-04-19 22:35:12