本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,更具體地,涉及一種安卓混合應(yīng)用的細(xì)粒度訪問控制方法。
背景技術(shù):
安卓(Android)混合應(yīng)用是使用Web技術(shù)和Java語言混合編寫開發(fā)的移動(dòng)應(yīng)用;Android混合應(yīng)用與Android原生應(yīng)用相比,采用Web技術(shù)開發(fā)的混合應(yīng)用的新特性帶來了原生應(yīng)用中并不存在的安全問題,尤其是混合應(yīng)用需要從網(wǎng)絡(luò)中加載內(nèi)容和執(zhí)行網(wǎng)絡(luò)代碼,并且混合應(yīng)用核心組件WebView提供了addJavaScriptInterface等接口將對(duì)設(shè)備資源的訪問能力暴露給了從網(wǎng)絡(luò)中加載的可信度未知的JavaScript代碼,使得用戶設(shè)備上的資源信息和隱私數(shù)據(jù)可能被惡意攻擊者竊取,帶來安全隱患。
為解決Android混合應(yīng)用中加載的網(wǎng)絡(luò)代碼訪問系統(tǒng)資源可能帶來的安全問題,國(guó)內(nèi)外的研究人員已經(jīng)進(jìn)行了一些探索與研究。目前的Android系統(tǒng)對(duì)權(quán)限的授予范圍是整個(gè)應(yīng)用程序,只要應(yīng)用程序申請(qǐng)了某一權(quán)限,則應(yīng)用中的任何代碼都可以訪問與該權(quán)限對(duì)應(yīng)的系統(tǒng)資源。對(duì)于Android原生應(yīng)用,應(yīng)用代碼都是本地端的Java代碼,這些代碼的可信程度是一致的,Android系統(tǒng)提供的權(quán)限機(jī)制可以有效的控制應(yīng)用代碼對(duì)設(shè)備資源訪問;但在擴(kuò)展到混合應(yīng)用后,由于混合應(yīng)用中實(shí)現(xiàn)業(yè)務(wù)邏輯的代碼主要由Web技術(shù)實(shí)現(xiàn),需要加載不同源的網(wǎng)絡(luò)內(nèi)容,而這些網(wǎng)絡(luò)內(nèi)容中包含的代碼的可信程度是有區(qū)別的,此時(shí)Android系統(tǒng)提供的權(quán)限機(jī)制就不能很好的控制這些網(wǎng)絡(luò)代碼對(duì)系統(tǒng)資源的訪問了。Georgiev M等人(Georgiev M,Jana S,Shmatikov V.Breaking and fixing origin-based access control in hybrid web mobile application frameworks.NDSS symposium.NIH Public Access,2014,San Diego,California,2014:1)采用NoFrak框架來保證混合應(yīng)用中未授權(quán)的網(wǎng)絡(luò)源中的Web內(nèi)容不能訪問設(shè)備資源,保證混合應(yīng)用中可以自由加載來自不同網(wǎng)絡(luò)域的Web頁(yè)面,通過設(shè)置白名單來限制不同源的網(wǎng)絡(luò)內(nèi)容是否能訪問系統(tǒng)資源;NoFrak框架在一定程度上起到了保護(hù)系統(tǒng)資源不被惡意網(wǎng)絡(luò)代碼訪問的作用,但是它控制粒度比較粗糙,不能滿足不同網(wǎng)絡(luò)域的網(wǎng)絡(luò)內(nèi)容訪問不同系統(tǒng)資源的要求,同時(shí)其訪問控制策略采用開發(fā)者靜態(tài)配置的方式,缺乏靈活性,用戶無法根據(jù)自己的需求配置訪問控制策略。Luo等人(Jin X,Wang L,Luo T,et al.Fine-grained access control for html5-based mobile applications in android.Information Security.Springer International Publishing,2015:309-318)提出了一種針對(duì)混合應(yīng)用中加載的Web內(nèi)容的訪問控制機(jī)制,通過修改Android系統(tǒng)和Webkit引擎,通過修改HTML元素標(biāo)簽的屬性,設(shè)置其訪問系統(tǒng)資源的能力,在應(yīng)用運(yùn)行時(shí),Webkit解析引擎解析HTML頁(yè)面,獲取頁(yè)面元素的訪問權(quán)限并結(jié)合應(yīng)用本身申請(qǐng)的權(quán)限來得到其實(shí)際的訪問控制權(quán)限,從而進(jìn)行訪問控制,這種方式需要修改Android系統(tǒng)本身,且需要開發(fā)者對(duì)HTML中的各個(gè)元素設(shè)置訪問權(quán)限,過程比較復(fù)雜,在實(shí)用性方面存在一定的問題。
綜上所述,當(dāng)前對(duì)于Andorid混合應(yīng)用中如何保護(hù)系統(tǒng)資源不被非可信的網(wǎng)絡(luò)內(nèi)容訪問的相關(guān)研究還不夠系統(tǒng)和深入,現(xiàn)有的解決方案能在一定程度上解決混合應(yīng)用中非可信網(wǎng)絡(luò)代碼訪問系統(tǒng)資源所造成的安全問題,但從實(shí)施的角度來看,現(xiàn)有技術(shù)在訪問控制粒度和靈活性上均存在不足,且需要修改Android系統(tǒng)本身,兼容性較差,不易于實(shí)施。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種安卓混合應(yīng)用的細(xì)粒度訪問控制方法,在無需對(duì)Android系統(tǒng)本身和Web頁(yè)面進(jìn)行修改的情況下,將Android混合應(yīng)用對(duì)設(shè)備系統(tǒng)資源訪問權(quán)限的分配細(xì)化到針對(duì)Android混合應(yīng)用中加載的不同的網(wǎng)絡(luò)域,以克服Android系統(tǒng)無法精細(xì)控制Android混合應(yīng)用中網(wǎng)絡(luò)代碼對(duì)系統(tǒng)資源的訪問而引發(fā)的安全問題。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種安卓混合應(yīng)用的細(xì)粒度訪問控制方法,包括如下步驟:
(1)對(duì)安卓混合應(yīng)用中可能加載的各類的網(wǎng)絡(luò)域配置訪問控制策略;
(2)通過解析開發(fā)者預(yù)先定義策略配置文件,或者通過用戶動(dòng)態(tài)配置來獲取所運(yùn)行的安卓混合應(yīng)用的訪問控制策略;
(3)在安卓混合應(yīng)用的運(yùn)行中,當(dāng)安卓混合應(yīng)用的WebView中加載的網(wǎng)絡(luò)頁(yè)面中的代碼需要訪問系統(tǒng)資源時(shí),通過截取訪問請(qǐng)求對(duì)插件管理模塊(Plugin Manager)的調(diào)用鏈,獲取發(fā)起訪問請(qǐng)求的來源和擬訪問的插件信息,并將這些相關(guān)信息進(jìn)行封裝;
(4)據(jù)訪問請(qǐng)求的來源、擬訪問的插件的信息,查詢?cè)L問控制策略庫(kù),根據(jù)訪問控制策略判斷是否允許該訪問請(qǐng)求;
(5)插件管理模塊根據(jù)判斷的結(jié)果進(jìn)行處理;若允許該訪問,則調(diào)用擬訪問插件的具體響應(yīng)函數(shù)處理該訪問請(qǐng)求,若拒絕該訪問,則結(jié)束。
優(yōu)選地,上述安卓混合應(yīng)用的細(xì)粒度訪問控制方法,其步驟(1)包括如下子步驟:
(1)根據(jù)安卓混合應(yīng)用開發(fā)框架的命令行工具創(chuàng)建安卓混合應(yīng)用;
(1.2)在應(yīng)安卓混合應(yīng)用的assets/www目錄中實(shí)現(xiàn)完成應(yīng)用邏輯功能的各HTML、CSS和js文件;
(1.3)配置應(yīng)用的Manifest.xml文件res/xml/config.xml文件來指定應(yīng)用申請(qǐng)的權(quán)限和使用的插件;
(1.4)配置應(yīng)用的res/xml/permission.xml文件來指定應(yīng)用中需要加載的各網(wǎng)絡(luò)域?qū)Ω鞑寮脑L問控制策略。
優(yōu)選地,上述安卓混合應(yīng)用的細(xì)粒度訪問控制方法,其步驟(2)具體包括以下子步驟:
(2.1)由權(quán)限管理模塊(Permission Manager)獲取開發(fā)者預(yù)先定義的策略配置文件并對(duì)其進(jìn)行解析;
(2.2)根據(jù)解析獲得的訪問控制主體、客體和動(dòng)作相關(guān)信息構(gòu)建訪問控制策略集合;
(2.3)由用戶根據(jù)應(yīng)用需求對(duì)上述問控制策略集合進(jìn)行增加、刪除或修改,來更新訪問控制策略集合。
優(yōu)選地,上述安卓混合應(yīng)用的細(xì)粒度訪問控制方法,其步驟(3)具體包括以下子步驟:
(3.1)當(dāng)安卓混合應(yīng)用的WebView中加載的Web頁(yè)面擬訪問系統(tǒng)資源時(shí),通過JavaScript代碼調(diào)用相關(guān)插件的js文件中提供的函數(shù);
(3.2)所述插件的js文件中的處理函數(shù)將相關(guān)的訪問請(qǐng)求的參數(shù)進(jìn)行封裝,采用安卓混合應(yīng)用開發(fā)框架提供的接口方法進(jìn)行統(tǒng)一處理;
(3.3)通過在初始化過程將安卓混合應(yīng)用綁定到安卓混合應(yīng)用WebView的橋接接口,將網(wǎng)絡(luò)頁(yè)面中對(duì)系統(tǒng)資源的訪問請(qǐng)求傳遞給Java層;
(3.4)由插件管理模塊根據(jù)訪問請(qǐng)求的參數(shù),查找對(duì)應(yīng)的插件對(duì)象;若存在插件對(duì)象,則將訪問請(qǐng)求的來源和擬訪問的插件信息進(jìn)行封裝,形成訪問請(qǐng)求信息后發(fā)送給權(quán)限管理模塊(PermissionManager);若不存在插件對(duì)象,則結(jié)束本次訪問。
優(yōu)選地,上述安卓混合應(yīng)用的細(xì)粒度訪問控制方法,其步驟(4)具體包括以下子步驟:
(4.1)權(quán)限管理模塊對(duì)訪問請(qǐng)求信息進(jìn)行解析,獲取訪問請(qǐng)求的主體和客體信息,即發(fā)起訪問請(qǐng)求的網(wǎng)絡(luò)域和擬訪問的插件;
(4.2)根據(jù)訪問請(qǐng)求的主體和客體信息查詢?cè)L問控制策略集合,判斷相應(yīng)的訪問控制策略是否存在;若是,則根據(jù)策略判斷是否允許訪問請(qǐng)求,若否,則根據(jù)默認(rèn)的策略進(jìn)行判斷。
優(yōu)選地,上述安卓混合應(yīng)用的細(xì)粒度訪問控制方法,其步驟(5)具體包括以下子步驟:
(5.1)若步驟(4)的判斷結(jié)果為允許訪問,則調(diào)用訪問請(qǐng)求對(duì)應(yīng)的插件來訪問系統(tǒng)資源;若判斷結(jié)果為拒絕訪問,則結(jié)束本次訪問;若判斷結(jié)果為詢問用戶,則進(jìn)入步驟(5.2);
(5.2)若用戶選擇允許訪問,則訪問請(qǐng)求對(duì)的插件來訪問系統(tǒng)資源,若用戶選擇拒絕訪問,則結(jié)束本次訪問。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
(1)本發(fā)明提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法,實(shí)現(xiàn)了細(xì)粒度的訪問控制;在訪問控制中根據(jù)預(yù)先定義的訪問控制策略來判定訪問請(qǐng)求是否被允許,而訪問控制策略的制定是基于安卓混合應(yīng)用中可能加載的不同網(wǎng)絡(luò)域、對(duì)不同的網(wǎng)絡(luò)域配置不同的插件訪問控制策略,避免了對(duì)不同網(wǎng)絡(luò)域訪問系統(tǒng)資源的訪問控制一刀切的管理方法;
(2)本發(fā)明提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法,訪問控制更加靈活;各網(wǎng)絡(luò)域?qū)Ω鞑寮脑L問控制策略可以預(yù)先配置,并且可以根據(jù)開發(fā)或應(yīng)用的需求由開發(fā)者自行更新,使得訪問控制更加靈活;
(3)本發(fā)明提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法,兼容原生Android系統(tǒng)和Web應(yīng)用,由于在本發(fā)明的方法中,不涉及對(duì)Android系統(tǒng)的修改,使用本發(fā)明所述的方法,安卓混合應(yīng)用可以在原生Android系統(tǒng)下實(shí)施細(xì)粒度訪問控制。
附圖說明
圖1是本發(fā)明實(shí)施例的整體架構(gòu)圖;
圖2為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的流程示意圖;
圖3為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的步驟1的細(xì)化流程圖;
圖4為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的步驟2的細(xì)化流程圖;
圖5為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的步驟3的細(xì)化流程圖;
圖6為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的步驟4的細(xì)化流程圖;
圖7為本發(fā)明實(shí)施例所提供的安卓混合應(yīng)用的細(xì)粒度訪問控制方法的步驟5的細(xì)化流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
以下首先就本發(fā)明的技術(shù)術(shù)語進(jìn)行解釋和說明:
Android:由Google主導(dǎo)開發(fā)的基于Linux內(nèi)核的移動(dòng)操作系統(tǒng),以其開放的特性在移動(dòng)操作系統(tǒng)市場(chǎng)上擁有較高的占有率;
Android應(yīng)用:運(yùn)行在Android系統(tǒng)中的應(yīng)用程序,主要由Java語言開發(fā);
Android混合應(yīng)用:使用HTML5、CSS、JavaScript等Web技術(shù)和Java語言混合編寫開發(fā)的移動(dòng)應(yīng)用,與原生應(yīng)用不同,Android混合應(yīng)用主要由兩部分構(gòu)成,一部分是由本地Java代碼實(shí)現(xiàn)的中間框架層,實(shí)現(xiàn)應(yīng)用與系統(tǒng)之間的交互,獲取系統(tǒng)資源;另一部分由WebView組件構(gòu)成,WebView可以視為一個(gè)嵌入式的瀏覽器,用來加載Web頁(yè)面和處理JavaScript代碼;
WebView:混合應(yīng)用的核心組件,WebView組件是View組件的一個(gè)子類,主要用于展示W(wǎng)eb頁(yè)面,使用WebView,Android應(yīng)用相當(dāng)于嵌入了一個(gè)功能強(qiáng)大的瀏覽器,可以完成相關(guān)渲染W(wǎng)eb內(nèi)容和處理JavaScript代碼等操作;相較于瀏覽器應(yīng)用,WebView組件還提供了多種Web頁(yè)面中JavaScript和本地Java對(duì)象的通信機(jī)制,將訪問設(shè)備的能力暴露給WebView中加載的網(wǎng)絡(luò)內(nèi)容,使之獲得訪問系統(tǒng)資源的能力;
混合應(yīng)用開發(fā)框架:用來幫助開發(fā)者使用標(biāo)準(zhǔn)的Web技術(shù)來創(chuàng)建基于HTML-5的混合應(yīng)用的命令行工具,主要包括框架部分和插件部分,框架部分主要作用是充當(dāng)WebView中Web內(nèi)容和插件模塊進(jìn)行交互的橋梁;而插件部分則是負(fù)責(zé)實(shí)際地對(duì)設(shè)備資源進(jìn)行操作。針對(duì)每一種設(shè)備資源,如電話功能、通訊錄、攝像頭、短信、WiFi和NFC等,開發(fā)框架都提供相應(yīng)的一種或多種插件,以PhoneGap開發(fā)框架為例,目前,PhoneGap官方提供16種內(nèi)置的插件供開發(fā)者直接使用,開發(fā)者可以根據(jù)自己的功能需求選擇添加相應(yīng)的插件。另外,混合應(yīng)用中間件開發(fā)框架還允許開發(fā)者自定義插件,如果開發(fā)者需要的功能內(nèi)置插件并沒有提供,開發(fā)者可以按照插件開發(fā)規(guī)定開發(fā)自定義的插件或使用第三方插件;
網(wǎng)絡(luò)域:混合應(yīng)用中加載的網(wǎng)絡(luò)頁(yè)面來自的URL所屬的域。
本發(fā)明所提出的全新的基于PhoneGap開發(fā)框架的Android混合應(yīng)用細(xì)粒度訪問控制方法,其目的是在不修改Android系統(tǒng)本身和Web應(yīng)用的情況下對(duì)混合應(yīng)用中加載的來自不同網(wǎng)絡(luò)域的網(wǎng)絡(luò)頁(yè)面對(duì)系統(tǒng)資源的訪問操作進(jìn)行細(xì)粒度的控制;以下結(jié)合實(shí)施例和附圖對(duì)本發(fā)明所提供的細(xì)粒度訪問控制方法做進(jìn)一步說明。
實(shí)施例中以PhoneGap框架為例,對(duì)如何通過改造混合應(yīng)用中間件開發(fā)框架實(shí)現(xiàn)對(duì)安卓混合應(yīng)用的細(xì)粒度訪問控制進(jìn)行詳細(xì)說明。
圖1示意了基于PhoneGap開發(fā)框架的Android混合應(yīng)用細(xì)粒度訪問控制框架的整體架構(gòu),其中的圓角矩形表示經(jīng)過修改的框架模塊;本發(fā)明的訪問控制方法主要的工作主要集中在以下兩個(gè)部分:首先,在涉及JavaScript代碼調(diào)用插件提供的訪問系統(tǒng)資源的API處進(jìn)行訪問請(qǐng)求的獲取,即修改Plugin Manager模塊來獲取對(duì)插件調(diào)用的訪問請(qǐng)求;其次,通過增加Permission Manager模塊來存儲(chǔ)應(yīng)用開發(fā)者和用戶配置的訪問控制策略,在訪問請(qǐng)求發(fā)起后,通過查詢?cè)L問控制策略來判斷是否允許訪問請(qǐng)求的執(zhí)行,并將結(jié)果返回給Plugin Manager模塊。
圖2示意了實(shí)施例提供的針對(duì)Android混合應(yīng)用的細(xì)粒度訪問控制方法的流程,具體包括以下步驟:
步驟1.應(yīng)用開發(fā)者使用拓展后的PhoneGap框架開發(fā)Android混合應(yīng)用,并根據(jù)實(shí)際情況對(duì)混合應(yīng)用中可能加載的不同的網(wǎng)絡(luò)域配置訪問控制策略;
步驟2.在混合應(yīng)用的運(yùn)行中,由權(quán)限管理模塊(Permission Manager)通過讀取解析應(yīng)用開發(fā)者預(yù)先定義策略配置文件,或者通過用戶動(dòng)態(tài)配置來獲取相應(yīng)的訪問控制策略;
步驟3.在混合應(yīng)用的運(yùn)行中,當(dāng)其WebView中加載的網(wǎng)絡(luò)頁(yè)面中的代碼需要訪問系統(tǒng)資源時(shí),截取其對(duì)插件管理模塊(Plugin Manager)的調(diào)用鏈,獲取發(fā)起訪問請(qǐng)求的網(wǎng)絡(luò)域和需要訪問的插件等信息,并這些相關(guān)信息進(jìn)行封裝,傳遞給PermissionManager進(jìn)行處理;
步驟4.PermissionManager根據(jù)訪問請(qǐng)求的來源、需要訪問的插件的名稱等信息,查詢?cè)L問控制策略庫(kù),根據(jù)訪問控制策略進(jìn)行判斷是否允許該訪問,并將結(jié)果返回給Plugin Manager;;
步驟5.插件管理模塊根據(jù)判斷的結(jié)果進(jìn)行處理;若允許該訪問,則調(diào)用擬訪問插件的具體響應(yīng)函數(shù)處理該訪問請(qǐng)求,若拒絕該訪問,則結(jié)束。
實(shí)施例中,步驟1的流程如圖3所示,包括以下子步驟:
1.1應(yīng)用開發(fā)者使用PhoneGap命令行工具創(chuàng)建混合應(yīng)用;
1.2在應(yīng)用的在應(yīng)用的assets/www目錄中實(shí)現(xiàn)完成應(yīng)用邏輯功能的各HTML、CSS和js文件;
1.3配置應(yīng)用的Manifest.xml文件res/xml/config.xml文件來指定應(yīng)用申請(qǐng)的權(quán)限和使用的PhoneGap插件;
實(shí)施例中,假設(shè)應(yīng)用開發(fā)者在應(yīng)用中使用了Device、Camera和Geolocation插件;
并申請(qǐng)了查詢?cè)O(shè)備狀態(tài)權(quán)限android.permission.READ_PHONE_STATE、使用攝像頭權(quán)限android.permission.CAMERA、寫文件權(quán)限android.permission.WRITE_EXTERNAL_STORAGE、使用位置相關(guān)權(quán)限android.permission.ACCESS_COARSE_LOCATION和android.permission.ACCESS_FINE_LOCATION;
1.4配置應(yīng)用的res/xml/permission.xml文件來指定應(yīng)用中需要加載的不同網(wǎng)絡(luò)域?qū)Σ煌寮脑L問控制策略;實(shí)施例中,應(yīng)用開發(fā)者訪問策略配置示例如下:
實(shí)施例中,步驟2的流程如圖4所示,包括以下子步驟:
2.1權(quán)限管理模塊(Permission Manager)讀取開發(fā)者預(yù)先定義的策略配置文件,并對(duì)之進(jìn)行解析;在本例中,就是對(duì)步驟(1.4)所定義的上述策略進(jìn)行解析;
2.2根據(jù)解析得到的訪問控制主體、客體和動(dòng)作等相關(guān)信息構(gòu)建訪問控制策略集合;
2.3用戶點(diǎn)擊訪問控制策略設(shè)置按鈕時(shí),調(diào)出訪問控制策略設(shè)置界面,將當(dāng)前訪問控制策略集合中的策略展示給用戶;
2.4用戶根據(jù)自己的需要對(duì)訪問控制策略進(jìn)行相應(yīng)的增加、刪除和修改,當(dāng)用戶點(diǎn)擊保存按鈕后,更新訪問控制策略集合。
實(shí)施例中,步驟3的流程如圖5所示,包括以下子步驟:
3.1混合應(yīng)用WebView中加載的Web頁(yè)面在需要訪問系統(tǒng)資源時(shí),通過JavaScript代碼調(diào)用相關(guān)插件的js文件中提供的函數(shù);
不失一般性,假設(shè)HTML頁(yè)面"http://*.a.com"中存在拍照按鈕,當(dāng)點(diǎn)擊按鈕時(shí),按鈕的響應(yīng)函數(shù)capturePhoto()被調(diào)用,capturePhoto()方法中調(diào)用Camera.js文件中提供的處理函數(shù)camera.getPicture();
3.2插件的js文件中的處理函數(shù)將相關(guān)的訪問請(qǐng)求的參數(shù)進(jìn)行封裝,調(diào)用PhoneGap框架提供的cordova.js文件提供的androidExec()方法進(jìn)行統(tǒng)一處理;
在本例中,Camera.js文件中的camera.getPicture()方法設(shè)置successCallback,errorCallback和其他相關(guān)參數(shù),調(diào)用cordova.js文件中提供的androidExec()方法;
3.3通過應(yīng)用在初始化過程SystemWebViewEngine模塊提供給混合應(yīng)用WebView的橋接接口SystemExposedJsApi對(duì)象,cordova.js中的androidExec()方法將網(wǎng)絡(luò)頁(yè)面中對(duì)系統(tǒng)資源的訪問請(qǐng)求發(fā)送給SystemExposedJsApi對(duì)象,調(diào)用它的exec()方法來處理訪問請(qǐng)求;
3.4 SystemWebViewEngine對(duì)象的exec()方法調(diào)用其成員變量CordovaBridge對(duì)象的jsExec()方法;
3.5 CordovaBridge對(duì)象進(jìn)一步將訪問請(qǐng)求交由其成員變量PluginManager進(jìn)行處理;
3.6 PluginManager對(duì)象根據(jù)訪問請(qǐng)求的相關(guān)參數(shù),查找對(duì)應(yīng)插件對(duì)象,若存在相應(yīng)的插件,則將訪問請(qǐng)求的來源域和插件相關(guān)信息進(jìn)行封裝,傳遞給PermissionManager進(jìn)行處理,否則,直接返回;
在本實(shí)施例中,訪問請(qǐng)求需要訪問Camera插件,應(yīng)用中對(duì)此插件進(jìn)行了申明,則PluginManager將訪問請(qǐng)求的來源域和插件相關(guān)信息進(jìn)行封裝,傳遞給PermissionManager進(jìn)行處理。
實(shí)施例中,步驟4的流程如圖6所示,包括以下子步驟:
4.1PermissionManager解析傳遞過來的訪問請(qǐng)求信息,獲取訪問請(qǐng)求的主體和客體,即發(fā)起訪問請(qǐng)求的網(wǎng)絡(luò)域和需要訪問的插件;
在本實(shí)施例中,訪問請(qǐng)求的主體是"http://*.a.com",訪問請(qǐng)求的客體是Camera插件;
4.2根據(jù)訪問請(qǐng)求的主體和客體信息查詢?cè)L問控制策略集合,判斷相應(yīng)的訪問控制策略是否存在,若存在,則根據(jù)策略判斷是否允許訪問請(qǐng)求,若不存在,則根據(jù)默認(rèn)的策略進(jìn)行判斷;
在本實(shí)施例中,相應(yīng)的訪問控制策略存在,即<access origin="http://*.a.com"plugin="Device"action="allow"/>,則Permission Manager返回允許訪問的結(jié)果;
4.3將判斷的結(jié)果返回給插件管理模塊;實(shí)施例中,步驟5的流程如圖7所示,包括以下子步驟進(jìn):
5.1插件管理模塊獲取PermissionManager對(duì)象返回的訪問控制判斷結(jié)果;
5.2若判斷結(jié)果為允許訪問,則調(diào)用相應(yīng)的插件訪問系統(tǒng)資源,若判斷結(jié)果為拒絕訪問,則直接返回,若判斷結(jié)果為詢問用戶,則進(jìn)入步驟5.3;
在本例中,返回的訪問控制結(jié)果為允許訪問,則PluginManager對(duì)象調(diào)用相應(yīng)的Camera插件來處理訪問請(qǐng)求,并將結(jié)果返回;
5.3通過對(duì)話框來詢問用戶是否允許訪問請(qǐng)求執(zhí)行,若用戶選擇允許訪問,則調(diào)用相應(yīng)的插件訪問系統(tǒng)資源,若用戶選擇拒絕訪問,則結(jié)束本次訪問。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。