OSGi中的權限

在上一篇文章中 ,我們介紹了為Java應用程序實現沙箱的方法,在其中我們可以安全地運行移動代碼 。

這篇文章探討了如何在OSGi環境中執行相同的操作。

OSGi

OSGi規范 為Java定義了一個動態模塊系統 。 因此,它是實施那種可以使您的應用程序動態添加移動代碼的插件系統的理想選擇。

OSGi中的安全性基于我們之前討論的Java 2安全性體系結構,因此您可以重復使用有關代碼簽名等方面的知識。

但是,OSGi進一步走了幾步。

吊銷權限

Java權限模型的弱點之一是,您只能顯式授予權限,而不能撤銷它們。 在許多情況下,您都希望允許所有內容(特殊情況除外)。

沒有使用標準Java權限來執行此操作的方法,但是幸運的是,OSGi引入了一種解決方案。

缺點是OSGi引入了自己的語法來指定策略。

以下示例顯示如何拒絕com.acme.secret子包的PackagePermission

DENY {( ..PackagePermission "com.acme.secret.*" "import,exportonly" )
} "denyExample"

(在下面的示例中,我給出了權限類的簡單名稱,而不是完全限定名稱。我通過在簡單名稱前面加上..暗示這一點..

PackagePermission是OSGi定義的用于對包導入和導出進行授權的權限。 您的應用程序可以使用這樣的策略來確保移動代碼無法調用給定程序包中的類,例如,以限制對數據庫的直接訪問。

權限的可擴展條件

OSGi帶來的第二個改進是,可以在運行時動態評估授予權限的條件。

以下示例顯示如何有條件地授予ServicePermission

ALLOW {[ ..BundleSignerCondition "* ; o=ACME" ]( ..ServicePermission "..ManagedService" "register" )
} "conditionalExample"

ServicePermission是OSGi定義的權限,用于限制對OSGi服務的訪問。

條件是方括號之間的部分。 OSGi定義了兩個條件,它們對應于常規Java策略中的signedBycodeBase構造。

您還可以定義自己的條件 。 該規范給出了有關實施條件的詳細說明,尤其是有關性能的說明。

不同類型的權限

OSGi帶給Java權限模型的最后一項創新是存在不同類型的權限。

捆綁包可以指定自己的權限。 這并不意味著捆綁包可以為其授予權限,而是可以指定其運行所需的最大特權。 這些權限稱為本地權限

OSGi框架確保該捆綁包永遠不會擁有比本地權限更多的權限,從而實現了最小特權的原則 。

實際上,該說法并不完全準確。 每個捆綁軟件都將具有在OSGi環境中運行所需的某些權限,例如能夠讀取org.osgi.framework.*系統屬性。

這些權限被稱為隱式權限 ,因為每個捆綁軟件都將擁有它們,無論權限是否明確授予捆綁軟件。

權限的最終類型是系統權限 。 這些是授予捆綁軟件的權限。

有效權限是在運行時檢查的一組權限:

effective = (local ∩ system) ∪ implicit

本地權限啟用審核。 在將捆綁軟件安裝到OSGi環境之前,您可以檢查OSGI-INF/permissions.perm捆綁軟件許可資源 ,以查看捆綁軟件需要哪些許可。

如果您不滿意向捆綁軟件授予這些權限,則可以決定不安裝捆綁軟件。 關鍵是您無需運行捆綁軟件,也無需訪問其源代碼就可以了解所有這些信息。

集成到Java權限模型中

OSGi框架通過子類化ProtectionDomain將其擴展的權限模型集成到標準Java權限模型中。

每個捆綁軟件都為此目的獲得一個BundleProtectionDomainImpl

這種方法使OSGi可以利用您已經了解的標準Java權限模型,因此您可以重用該領域的大多數技能。 您唯一需要重新學習的就是如何編寫策略。

權限模型比較

為了使OSGi權限模型更有效,請考慮以下比較表,該表使用了XACML規范中的術語:

權限模型 標準Java OSGi
特效 允許 允許,拒絕
目標條件 codeBase,已簽名 codeBase,signedBy,自定義條件
組合算法 先申請 首先適用,本地/系統/隱式

從該表中,您可以看到OSGi模型比標準Java權限模型更具表現力,盡管不如XACML表現力強。

參考: 安全軟件開發博客上來自我們JCG合作伙伴 Remon Sinnema的OSGi許可 。

翻譯自: https://www.javacodegeeks.com/2012/11/permissions-in-osgi.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370709.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP簡單教程

目錄 HTTP簡介 HTTP工作原理 HTTP消息結構 客戶端請求消息服務器響應消息實例 HTTP請求方法HTTP響應頭信息HTTP狀態碼 HTTP狀態碼分類HTTP狀態碼列表 HTTP content-type對照表 HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫&…

Reversed-Z詳解

在3D渲染管線中,Z這個家伙幾乎無處不在,如Z-Buffer,Early-Z,Z-Cull,Z-Test,Z-Write等等,稍有接觸圖形學的人都會對這些術語有所耳聞。 那么Z到底是什么呢?首先Z當然可以是任意坐標系…

pyqt開發的程序模板_小程序定制開發和模板開發要多少錢?有什么區別?

到現在,小程序開發已經有了1年多的歷史,已經達到百萬數量級。無論是小程序商城還是小程序游戲,其開發方式不外乎兩種,一種是定制開發,另一種是模板開發。對于很多初次接觸小程序的客戶來說,還不知道小程序的…

實現字符串的編碼轉換,用以解決字符串亂碼問題

引起亂碼的情況很多~實質上 主要是字符串本身的編碼格式 與程序所需要的編碼格式不一致導致的。要解決亂碼其實很簡單, 分2步 : 1:獲取到字符串 本身的編碼 2:改變字符串編碼 (本身編碼 -> 新編碼) 話不…

python運行原理_Python線程池及其原理和使用(超級詳細)

系統啟動一個新線程的成本是比較高的,因為它涉及與操作系統的交互。在這種情形下,使用線程池可以很好地提升性能,尤其是當程序中需要創建大量生存期很短暫的線程時,更應該考慮使用線程池。 線程池在系統啟動時即創建大量空閑的線程…

Google Guava緩存

這篇文章是我在Google Guava上系列文章的續篇,這次涵蓋了Guava Cache。 與HashMap或ConcurrentHashMap相比,Guava Cache提供了更大的靈活性和功能,但不像使用EHCache或Memcached那樣繁重(就此而言,它很健壯&#xff0c…

html 三列布局(兩列自適應,一列固定寬度)

不做過多解釋:主要是記錄一個完整的布局樣式,實現頁面大致三列其中左右兩列是自適應寬度,中間固定寬度效果。 不多少代碼奉上: CSS樣式代碼: /*********************公共標簽樣式********************//************…

jsp常用動作

jsp:include 動態包含; jsp:forward 轉發; jsp:useBean 實例化bean對象; jsp:setProperty 設置一個屬性值 jsp:getProperty 獲取一個屬性值 jsp:param 動態傳參數; jsp:plugin 生成一個插件 jsp:useBean 實例化一個對象…

單曲循環 翻譯_歌單 | 單曲循環amp;熱評

December2020/12/ 寫在前面的話 /本來打算在跨年的時候才更文,但是吧又覺得空出這最后一個月有點蒼白,然后最近一直夜半網抑云(敏感ing)就想到可以做一期分享歌單的推文,分享一些最近聽得頻繁的歌曲(還不是刷抖音刷出來的)。《曖昧》// 王菲徘…

python的字符串內建函數

python的字符串內建函數 字符串方法是從python1.6到2.0慢慢加進來的——它們也被加到了Jython中。 這些方法實現了string模塊的大部分方法,如下表所示列出了目前字符串內建支持的方法,所有的方法都包含了對Unicode的支持,有一些甚至是專門用…

休息使用Jersey –包含JAXB,異常處理和客戶端程序的完整教程

最近,我開始使用Jersey API開發一個Restful Web服務項目。 在線提供了一些教程,但是我遇到了異常處理方面的一些問題,而且在使用JaxB和提供異常處理方法的完整項目中找不到任何地方。 因此,一旦我能夠使用帶有異常處理和客戶端程序…

python基于web可視化_獨家 | 基于Python實現交互式數據可視化的工具(用于Web)

轉自:數據派ID:datapi 作者:Alark Joshi 翻譯:陳雨琳 校對:吳金笛 本文2200字,建議閱讀8分鐘。 本文將介紹實現數據可視化的軟件包。 這學期(2018學年春季學期)我教授了一門關于數據…

SASS簡介及使用方法

一、什么是Sass Sass (Syntactically Awesome StyleSheets)是css的一個擴展開發工具,它允許你使用變量、條件語句等,使開發更簡單可維護。這里是官方文檔。 二、基本語法 1)變量 sass的變量名必須是一個$符號開頭,后面緊跟變量名…

【轉】Java方向如何準備BAT技術面試答案(匯總版)

原文地址:http://www.jianshu.com/p/1f1d3193d9e3 這個主題的內容之前分三個篇幅分享過,導致網絡上傳播的比較分散,所以本篇做了一個匯總,同時對部分內容及答案做了修改,歡迎朋友們吐槽、轉發。因為篇幅長度和時間的原…

numpy維度交換_“lazy”的transpose()函數——從numpy 數組的內存布局講起

1 數組的兩種內存布局方式行優先與列優先首先我們回顧一下,矩陣數據在內存中的兩種布局方式:行優先(row-major):以行為優先單位,在內存中逐行存儲/讀取;對于多維,意味著當線性掃描內…

云耀服務器切換系統,【計算】云耀服務器-常見操作匯總指南

通過上期的介紹,相信大家對于云耀云服務器的基本知識有了一個了解。云耀云服務器是一個具備獨立、完整的操作系統和網絡功能,可快速搭建簡單應用的新一代云服務器。接下來,本期為大家帶來關于云耀云服務器使用中的一些簡單方法和小技巧。1.云…

機器學習應該準備哪些數學預備知識?

轉 https://www.zhihu.com/question/36324957 https://www.zhihu.com/question/36324957/answer/139408269 機器學習應該準備哪些數學預備知識? 數據分析師,工作中經常使用機器學習模型,但是以調庫為主。 自己一直也在研究算法,也…

react usecontext_Vue3原理實戰運用,我用40行代碼把他裝進了React做狀態管理

前言vue-next是Vue3的源碼倉庫,Vue3采用lerna做package的劃分,而響應式能力vue/reactivity被劃分到了單獨的一個package中。如果我們想把它集成到React中,可行嗎?來試一試吧。使用示例話不多說,先看看怎么用的解解饞吧…

Spring MVC –自定義RequestMappingHandlerMapping

在xml bean定義文件中使用<mvc&#xff1a;annotation-driven />配置Spring MVC時&#xff0c;在內部將一個名為RequestMappingHandlerMapping的組件注冊到Spring MVC。 該組件或通常是HandlerMapping組件負責將請求URI路由到處理程序&#xff0c;這些處理程序是使用Requ…

css的三個特性 背景透明設置

關于行內元素&#xff08;補充一點&#xff09; 行內元素只能容納文本或其他行內元素。&#xff08;a特殊a里面可以放塊級元素&#xff09; 例子&#xff1a; 關于行高tip: 選擇器的嵌套層級不應大于3級&#xff0c;位置靠后的限定條件應盡可能的精確。 屬性定義必須另起一行…