idea中使用osgi_OSGi中的权限
idea中使用osgi
在上一篇文章中 ,我們介紹了為Java應(yīng)用程序?qū)崿F(xiàn)沙箱的方法,在其中我們可以安全地運行移動代碼 。
這篇文章探討了如何在OSGi環(huán)境中執(zhí)行相同的操作。
OSGi
OSGi規(guī)范 為Java定義了一個動態(tài)模塊系統(tǒng) 。 因此,它是實施那種可以使您的應(yīng)用程序動態(tài)添加移動代碼的插件系統(tǒng)的理想人選。
在OSGi的安全建立在Java 2安全架構(gòu),我們討論了前面 ,這樣你就可以重新使用您關(guān)于知識的代碼簽名等。
但是,OSGi進一步走了幾步。
吊銷權(quán)限
Java權(quán)限模型的弱點之一是,您只能顯式授予權(quán)限,而不能撤銷它們。 在很多情況下,您都希望允許所有內(nèi)容,但特殊情況除外。
不能使用標(biāo)準(zhǔn)Java權(quán)限來執(zhí)行此操作,但是幸運的是,OSGi引入了一種解決方案。
缺點是OSGi引入了自己的語法來指定策略。
以下示例顯示如何拒絕com.acme.secret子包的PackagePermission :
DENY {( ..PackagePermission "com.acme.secret.*" "import,exportonly" ) } "denyExample"(在本示例及以下示例中,我給出了權(quán)限類的簡單名稱,而不是全限定名稱。我通過在簡單名稱前面加上..暗示這一點.. )
PackagePermission是OSGi定義的用于對包導(dǎo)入和導(dǎo)出進行授權(quán)的權(quán)限。 您的應(yīng)用程序可以使用這樣的策略來確保移動代碼無法調(diào)用給定程序包中的類,例如,以限制對數(shù)據(jù)庫的直接訪問。
權(quán)限的可擴展條件
OSGi帶來的第二個改進是可以在運行時動態(tài)評估授予權(quán)限的條件。
以下示例顯示如何有條件地授予ServicePermission :
ALLOW {[ ..BundleSignerCondition "* ; o=ACME" ]( ..ServicePermission "..ManagedService" "register" ) } "conditionalExample"ServicePermission是OSGi定義的權(quán)限,用于限制對OSGi服務(wù)的訪問。
條件是方括號之間的部分。 OSGi定義了兩個條件,它們對應(yīng)于常規(guī)Java策略中的signedBy和codeBase構(gòu)造。
您還可以定義自己的條件 。 該規(guī)范給出了有關(guān)實施條件的詳細(xì)說明,尤其是有關(guān)性能的說明。
不同類型的權(quán)限
OSGi帶給Java權(quán)限模型的最后一項創(chuàng)新是存在不同類型的權(quán)限。
捆綁包可以指定自己的權(quán)限。 這并不意味著捆綁包可以為其授予權(quán)限,而是可以指定其運行所需的最大特權(quán)。 這些權(quán)限稱為本地權(quán)限 。
OSGi框架確保該捆綁包永遠(yuǎn)不會擁有比本地權(quán)限更多的權(quán)限,從而實現(xiàn)了最小特權(quán)的原則 。
實際上,該說法并不完全正確。 每個捆綁軟件都將具有在OSGi環(huán)境中運行所需的某些權(quán)限,例如能夠讀取org.osgi.framework.*系統(tǒng)屬性。
這些權(quán)限稱為隱式權(quán)限 ,因為每個捆綁軟件都將擁有它們,而不管這些權(quán)限是否明確授予捆綁軟件。
權(quán)限的最終類型是系統(tǒng)權(quán)限 。 這些是授予捆綁軟件的權(quán)限。
有效權(quán)限是在運行時檢查的一組權(quán)限:
effective = (local ∩ system) ∪ implicit本地權(quán)限啟用審核。 在將捆綁軟件安裝到OSGi環(huán)境之前,您可以檢查OSGI-INF/permissions.perm的捆綁軟件許可資源 ,以查看捆綁軟件需要哪些許可。
如果您不滿意向捆綁軟件授予這些權(quán)限,則可以決定不安裝捆綁軟件。 關(guān)鍵是您無需運行捆綁軟件,也無需訪問其源代碼就可以了解所有這些信息。
集成到Java權(quán)限模型中
OSGi框架通過將ProtectionDomain子類化,將其擴展的權(quán)限模型集成到標(biāo)準(zhǔn)Java權(quán)限模型中。
每個捆綁軟件都會為此目的獲得一個BundleProtectionDomainImpl 。
這種方法使OSGi可以利用您已經(jīng)了解的標(biāo)準(zhǔn)Java權(quán)限模型,從而可以重用該領(lǐng)域的大部分技能。 您唯一需要重新學(xué)習(xí)的就是如何編寫策略。
權(quán)限模型比較
為了透視OSGi權(quán)限模型,請考慮以下比較表,該表使用了XACML規(guī)范中的術(shù)語:
| 權(quán)限模型 | 標(biāo)準(zhǔn)Java OSGi|
| 許可證 | 允許,拒絕 |
| codeBase,已簽名 | codeBase,signedBy,自定義條件 |
| 先申請 | 首先適用,本地/系統(tǒng)/隱式 |
從該表中可以看到,OSGi模型比標(biāo)準(zhǔn)Java權(quán)限模型更具表現(xiàn)力,盡管不如XACML表現(xiàn)力強。
參考: 安全軟件開發(fā)博客上來自我們JCG合作伙伴 Remon Sinnema的OSGi許可 。
翻譯自: https://www.javacodegeeks.com/2012/11/permissions-in-osgi.html
idea中使用osgi
總結(jié)
以上是生活随笔為你收集整理的idea中使用osgi_OSGi中的权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 端口局域网ddos特定端口是什么(端口局
- 下一篇: 有关法的备案(法的备案)