亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

電視終端及Java反射控制方法和計(jì)算機(jī)可讀存儲介質(zhì)與流程

文檔序號:11287154閱讀:288來源:國知局
電視終端及Java反射控制方法和計(jì)算機(jī)可讀存儲介質(zhì)與流程

本發(fā)明涉及電子設(shè)備技術(shù)領(lǐng)域,尤其涉及電視終端及java反射控制方法和計(jì)算機(jī)可讀存儲介質(zhì)。



背景技術(shù):

隨著android產(chǎn)品越來越多,其友好的操作界面,豐富的擴(kuò)展應(yīng)用,以及開源性質(zhì),都是android系統(tǒng)目前在智能設(shè)備市場占用率上的遙遙領(lǐng)先其他系統(tǒng)的原因。

各種apk(android應(yīng)用程序)層出不窮,生態(tài)圈繁榮昌盛。由于android系統(tǒng)是開源的,應(yīng)用廠商對android源碼的理解也越發(fā)深刻,很多apk都使用了java的反射技術(shù)。所謂java反射,就是在java運(yùn)行時(shí)環(huán)境中,對于任意一個類,都能知道這個類有哪些屬性和方法,對于任意一個對象,都能調(diào)用它的任意一個方法。這種動態(tài)獲取類的信息以及動態(tài)調(diào)用對象的方法的功能來自于java語言的反射(reflection)機(jī)制。

java反射為程序員提供了很多便利,提高程序的靈活性,如抽象工廠模式,spring框架。但同時(shí)也破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差。

上述內(nèi)容僅用于輔助理解本發(fā)明的技術(shù)方案,并不代表承認(rèn)上述內(nèi)容是現(xiàn)有技術(shù)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的主要目的在于提供一種電視終端及java反射控制方法和計(jì)算機(jī)可讀存儲介質(zhì),旨在解決目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題。

為實(shí)現(xiàn)上述目的,本發(fā)明提供一種java反射控制方法,所述java反射控制方法包括以下步驟:

在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

優(yōu)選地,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,還包括:

在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

若是,拒絕所述java反射,并報(bào)錯;

若否,執(zhí)行所述java反射。

優(yōu)選地,所述方法,還包括:

在反射的入口類設(shè)置自定義靜態(tài)方法allowrelect,并設(shè)置禁止反射的類列表disableclasnamelist;

在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷。

優(yōu)選地,所述在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷的步驟之前,還包括:

確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;

將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。

優(yōu)選地,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,還包括:

在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種電視終端,所述電視終端包括:存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運(yùn)行的java反射控制程序,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

優(yōu)選地,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

若是,拒絕所述java反射,并報(bào)錯;

若否,執(zhí)行所述java反射。

優(yōu)選地,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在反射的入口類設(shè)置自定義靜態(tài)方法allowrelect,并設(shè)置禁止反射的類列表disableclasnamelist;

在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷。

優(yōu)選地,所述在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷的步驟之前,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;

將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。

優(yōu)選地,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種計(jì)算機(jī)可讀存儲介質(zhì),所述計(jì)算機(jī)可讀存儲介質(zhì)上存儲有java反射控制程序,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上所述的java反射控制方法的步驟。

本發(fā)明通過反射的入口類增加靜態(tài)方法來進(jìn)行java反射的判斷,根據(jù)設(shè)置的判斷阻止部分涉及訪問隱私數(shù)據(jù)的java反射,解決目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題。避免隱私數(shù)據(jù)被訪問,提高用戶數(shù)據(jù)的安全性。

附圖說明

圖1是本發(fā)明實(shí)施例方案涉及的硬件運(yùn)行環(huán)境的終端\裝置結(jié)構(gòu)示意圖;

圖2為本發(fā)明java反射控制方法一實(shí)施例的流程示意圖;

圖3為本發(fā)明java反射控制方法另一實(shí)施例的流程示意圖;

圖4為本發(fā)明java反射控制方法又一實(shí)施例的流程示意圖;

圖5為本發(fā)明一實(shí)施例中java反射的流程示意圖。

本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。

具體實(shí)施方式

應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

本發(fā)明實(shí)施例的主要解決方案是:在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;確定所述java反射自定義靜態(tài)方法allowrelect的屬性;在所述屬性為允許反射時(shí),執(zhí)行所述java反射;在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

由于目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題.本發(fā)明提供一種解決方案,通過反射的入口類增加靜態(tài)方法來進(jìn)行java反射的判斷,根據(jù)設(shè)置的判斷阻止部分涉及訪問隱私數(shù)據(jù)的java反射,解決目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題。避免隱私數(shù)據(jù)被訪問,提高用戶數(shù)據(jù)的安全性。

如圖1所示,圖1是本發(fā)明實(shí)施例方案涉及的硬件運(yùn)行環(huán)境的終端結(jié)構(gòu)示意圖。

本發(fā)明實(shí)施例電視終端為實(shí)現(xiàn)系統(tǒng)中隱私數(shù)據(jù)的安全,保證用戶數(shù)據(jù)安全。

如圖1所示,該電視終端可以包括:處理器1001,例如cpu,網(wǎng)絡(luò)接口1004,用戶接口1003,存儲器1005,通信總線1002。其中,通信總線1002用于實(shí)現(xiàn)這些組件之間的連接通信。用戶接口1003可以包括顯示屏(display)、輸入單元比如鍵盤(keyboard),可選用戶接口1003還可以包括標(biāo)準(zhǔn)的有線接口、無線接口。網(wǎng)絡(luò)接口1004可選的可以包括標(biāo)準(zhǔn)的有線接口、無線接口(如wi-fi接口)。存儲器1005可以是高速ram存儲器,也可以是穩(wěn)定的存儲器(non-volatilememory),例如磁盤存儲器。存儲器1005可選的還可以是獨(dú)立于前述處理器1001的存儲裝置。

可選地,電視終端還可以包括攝像頭、rf(radiofrequency,射頻)電路,傳感器、音頻電路、wifi模塊等等。其中,傳感器比如光傳感器、運(yùn)動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示屏的亮度,接近傳感器可在移動終端移動到耳邊時(shí),關(guān)閉顯示屏和/或背光。作為運(yùn)動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時(shí)可檢測出重力的大小及方向,可用于識別移動終端姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計(jì)姿態(tài)校準(zhǔn))、振動識別相關(guān)功能(比如計(jì)步器、敲擊)等;當(dāng)然,移動終端還可配置陀螺儀、氣壓計(jì)、濕度計(jì)、溫度計(jì)、紅外線傳感器、溫度傳感器、霍爾曼傳感器等其他傳感器,在此不再贅述。

本領(lǐng)域技術(shù)人員可以理解,圖1中示出的終端結(jié)構(gòu)并不構(gòu)成對終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。

如圖1所示,作為一種計(jì)算機(jī)存儲介質(zhì)的存儲器1005中可以包括操作系統(tǒng)、網(wǎng)絡(luò)通信模塊、用戶接口模塊以及java反射控制應(yīng)用程序。

在圖1所示的終端中,網(wǎng)絡(luò)接口1004主要用于連接后臺服務(wù)器,與后臺服務(wù)器進(jìn)行數(shù)據(jù)通信;用戶接口1003主要用于連接客戶端(用戶端),與客戶端進(jìn)行數(shù)據(jù)通信;而處理器1001可以用于調(diào)用存儲器1005中存儲的java反射控制應(yīng)用程序,并執(zhí)行以下操作:

在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

進(jìn)一步地,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,處理器1001可以調(diào)用存儲器1005中存儲的java反射控制應(yīng)用程序,還執(zhí)行以下操作:

在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

若是,拒絕所述java反射,并報(bào)錯;

若否,執(zhí)行所述java反射。

進(jìn)一步地,處理器1001可以調(diào)用存儲器1005中存儲的java反射控制應(yīng)用程序,還執(zhí)行以下操作:

在反射的入口類設(shè)置自定義靜態(tài)方法allowrelect,并設(shè)置禁止反射的類列表disableclasnamelist;

在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷。

進(jìn)一步地,所述在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷的步驟之前,處理器1001可以調(diào)用存儲器1005中存儲的java反射控制應(yīng)用程序,還執(zhí)行以下操作:

確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;

將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。

進(jìn)一步地,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,處理器1001可以調(diào)用存儲器1005中存儲的java反射控制應(yīng)用程序,還執(zhí)行以下操作:

在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

參照圖2,本發(fā)明的第一實(shí)施例提供一種java反射控制方法,所述java反射控制方法包括:

步驟s10,在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

在本發(fā)明的一實(shí)施例中,在需要對應(yīng)用程序更新或者進(jìn)行apk更新時(shí),由系統(tǒng)自動發(fā)送指令或者用戶點(diǎn)擊虛擬按鈕發(fā)起更新指令,在進(jìn)行更新時(shí),需要java反射機(jī)制找到相應(yīng)的接口訪問數(shù)據(jù),會發(fā)出相應(yīng)的java反射請求,電視終端或其系統(tǒng)在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射,例如,確定所述java反射指向的系統(tǒng)接口。所述java反射請求也可以是應(yīng)用程序發(fā)出。

步驟s20,確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

預(yù)先在反射的入口類設(shè)置靜態(tài)變量,所述靜態(tài)變量的屬性表示該類java反射是否允許,在所述allowrelect的屬性,即allowrelectflag=false時(shí),表示不允許java反射;在allowrelectflag=ture時(shí),表示允許java反射。被設(shè)置不允許進(jìn)行java反射的類涉及隱私數(shù)據(jù)的訪問,因而被設(shè)置為屬性值為false。也可根據(jù)用戶需求自由設(shè)置,通過設(shè)置,阻止部分的java反射,使得并不是全部反射均能執(zhí)行成功。

步驟s30,在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

步驟s40,在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

在所述屬性為允許反射時(shí),即在變量=ture時(shí),執(zhí)行所述java反射;在變量=false時(shí),拒絕所述java反射,并報(bào)錯,java反射無法執(zhí)行。

具體的,通過allowrelect的屬性執(zhí)行java反射控制的過程包括:

在反射的入口類,libcore/libart/src/main/java/java/lang/class.java加入靜態(tài)變量;pravatestaticbooleanallowreflectflag=false;進(jìn)入靜態(tài)方法publicstaticvoidallowreflect(booleanflag){allowreflectflag=flag;};allowreflectflag是通過allowreflect方法來設(shè)置的,默認(rèn)值是false,用戶可根據(jù)需求對值進(jìn)行設(shè)置,例如,改為ture。

本實(shí)施例通過反射的入口類增加靜態(tài)方法來進(jìn)行java反射的判斷,根據(jù)設(shè)置的判斷阻止部分涉及訪問隱私數(shù)據(jù)的java反射,解決目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題。避免隱私數(shù)據(jù)被訪問,提高用戶數(shù)據(jù)的安全性。

進(jìn)一步的,參照圖3,本發(fā)明的第二實(shí)施例提供一種java反射控制方法,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,還包括:

步驟s50,在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

步驟s60,判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

步驟s70,若是,拒絕所述java反射,并報(bào)錯;

步驟s80,若否,執(zhí)行所述java反射。

在本實(shí)施例中,通過反射類的入口類,加入禁止反射的類列表,即,在設(shè)置allowrelect的屬性的基礎(chǔ)上,再設(shè)置禁止反射的類列表,阻止一些類的java反射。加入禁止反射的類列表(可擴(kuò)展),所述java類列表構(gòu)建包括:設(shè)置禁止反射的類列表disableclasnamelist,確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。所述類列表中包含的以類名為主,也還可以是其他的有關(guān)類的信息,例如,類的標(biāo)識,類的類型等信息,根據(jù)類類型進(jìn)行反射禁止。

以android.app.activitymanger為例,rivatestaticfinal

stringdisableclassnamelist[]={“android.app.activitymanager”};結(jié)合圖2中的實(shí)施例,在class類中的forname方法中加入以下判斷來阻止反射:

if(allowreflectflag=false){

for(stringdisableclassname:disableclassnamelist){

if(classname!=null&&classname.equals(disableclassname)){

thrownewnosuchmethodexception(“thereflectionofthisclassisdisabled”);}

}

}

在allowrelect的屬性為ture時(shí),繼續(xù)進(jìn)行java類列表的判斷,在java反射在java類列表中時(shí),阻止java反射,在不在java反射類列表中時(shí),執(zhí)行java反射。

本實(shí)施例通過在反射的入口類,通過class的forname方法加入禁止反射的類列表,結(jié)合allowrelect的屬性進(jìn)行java反射的控制,進(jìn)一步提高java反射控制的準(zhǔn)確性,通過多層java反射的控制,進(jìn)一步提高了用戶數(shù)據(jù)的安全性。

進(jìn)一步的,參照圖4,本發(fā)明的第三實(shí)施例提供一種java反射控制方法,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,還包括:

步驟s90,在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

步驟s100,若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

在本實(shí)施例中,在一些場景下,為設(shè)置allowreflect屬性和未在禁止反射的類列表中的類也可能用戶需要禁止反射,會為其設(shè)置權(quán)限,在不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射;若設(shè)置了權(quán)限,則禁止java反射,報(bào)錯。所述設(shè)置權(quán)限可以是設(shè)置標(biāo)識或者進(jìn)行分類等。通過設(shè)置權(quán)限的方式,避免一些用戶不希望其他人看到的數(shù)據(jù)被訪問,進(jìn)一步提高用戶數(shù)據(jù)的安全性以及java反射的合理性。

為了更好的描述本發(fā)明實(shí)施例,java反射的過程包括:

s101,應(yīng)用程序;s102,使用class類的forname方法進(jìn)行反射;s103,allowreflectflag是否等于ture?若是,執(zhí)行s104,若否,執(zhí)行s105;s104,反射成功;s105,反射的類名是否允許?若是,執(zhí)行s104,若否,執(zhí)行s106,s106,反射被禁止,拋出異常。allowreflectflag是通過allowreflect方法來設(shè)置的,默認(rèn)值是false。系統(tǒng)默認(rèn)會攔截disableclassnamelist中定義的類。應(yīng)用程序就無法反射預(yù)先定義在列表中的類。android系統(tǒng)廠商定制的應(yīng)用可以通過allowreflect(true)方法繞過此限制。

在一實(shí)施例中,本發(fā)明還提供一種電視終端,所述電視終端包括:存儲器、處理器及存儲在所述存儲器上并可在所述處理器上運(yùn)行的java反射控制程序,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

在本發(fā)明的一實(shí)施例中,在需要對應(yīng)用程序更新或者進(jìn)行apk更新時(shí),由系統(tǒng)自動發(fā)送指令或者用戶點(diǎn)擊虛擬按鈕發(fā)起更新指令,在進(jìn)行更新時(shí),需要java反射機(jī)制找到相應(yīng)的接口訪問數(shù)據(jù),會發(fā)出相應(yīng)的java反射請求,電視終端或其系統(tǒng)在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射,例如,確定所述java反射指向的系統(tǒng)接口。所述java反射請求也可以是應(yīng)用程序發(fā)出。

確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

預(yù)先在反射的入口類設(shè)置靜態(tài)變量,所述靜態(tài)變量的屬性表示該類java反射是否允許,在所述allowrelect的屬性,即allowrelectflag=false時(shí),表示不允許java反射;在allowrelectflag=ture時(shí),表示允許java反射。被設(shè)置不允許進(jìn)行java反射的類涉及隱私數(shù)據(jù)的訪問,因而被設(shè)置為屬性值為false。也可根據(jù)用戶需求自由設(shè)置,通過設(shè)置,阻止部分的java反射,使得并不是全部反射均能執(zhí)行成功。

在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

在所述屬性為允許反射時(shí),即在變量=ture時(shí),執(zhí)行所述java反射;在變量=false時(shí),拒絕所述java反射,并報(bào)錯,java反射無法執(zhí)行。

具體的,通過allowrelect的屬性執(zhí)行java反射控制的過程包括:

在反射的入口類,libcore/libart/src/main/java/java/lang/class.java加入靜態(tài)變量;pravatestaticbooleanallowreflectflag=false;進(jìn)入靜態(tài)方法publicstaticvoidallowreflect(booleanflag){allowreflectflag=flag;};allowreflectflag是通過allowreflect方法來設(shè)置的,默認(rèn)值是false,用戶可根據(jù)需求對值進(jìn)行設(shè)置,例如,改為ture。

本實(shí)施例通過反射的入口類增加靜態(tài)方法來進(jìn)行java反射的判斷,根據(jù)設(shè)置的判斷阻止部分涉及訪問隱私數(shù)據(jù)的java反射,解決目前java反射破壞了java的封裝性,反射系統(tǒng)api更是破壞了android系統(tǒng)的安全性,讀取、修改系統(tǒng)的私有數(shù)據(jù)等,數(shù)據(jù)安全差的技術(shù)問題。避免隱私數(shù)據(jù)被訪問,提高用戶數(shù)據(jù)的安全性。

進(jìn)一步的,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

若是,拒絕所述java反射,并報(bào)錯;

若否,執(zhí)行所述java反射。

在本實(shí)施例中,通過反射類的入口類,加入禁止反射的類列表,即,在設(shè)置allowrelect的屬性的基礎(chǔ)上,再設(shè)置禁止反射的類列表,阻止一些類的java反射。加入禁止反射的類列表(可擴(kuò)展),所述java類列表構(gòu)建包括:設(shè)置禁止反射的類列表disableclasnamelist,確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。所述類列表中包含的以類名為主,也還可以是其他的有關(guān)類的信息,例如,類的標(biāo)識,類的類型等信息,根據(jù)類類型進(jìn)行反射禁止。

以android.app.activitymanger為例,rivatestaticfinal

stringdisableclassnamelist[]={“android.app.activitymanager”};結(jié)合圖2中的實(shí)施例,在class類中的forname方法中加入以下判斷來阻止反射:

if(allowreflectflag=false){

for(stringdisableclassname:disableclassnamelist){

if(classname?。絥ull&&classname.equals(disableclassname)){

thrownewnosuchmethodexception(“thereflectionofthisclassisdisabled”);}

}

}

在allowrelect的屬性為ture時(shí),繼續(xù)進(jìn)行java類列表的判斷,在java反射在java類列表中時(shí),阻止java反射,在不在java反射類列表中時(shí),執(zhí)行java反射。

本實(shí)施例通過在反射的入口類,通過class的forname方法加入禁止反射的類列表,結(jié)合allowrelect的屬性進(jìn)行java反射的控制,進(jìn)一步提高java反射控制的準(zhǔn)確性,通過多層java反射的控制,進(jìn)一步提高了用戶數(shù)據(jù)的安全性。

進(jìn)一步的,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,所述java反射控制程序被所述處理器執(zhí)行時(shí)實(shí)現(xiàn)如下步驟:

在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

在本實(shí)施例中,在一些場景下,為設(shè)置allowreflect屬性和未在禁止反射的類列表中的類也可能用戶需要禁止反射,會為其設(shè)置權(quán)限,在不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射;若設(shè)置了權(quán)限,則禁止java反射,報(bào)錯。所述設(shè)置權(quán)限可以是設(shè)置標(biāo)識或者進(jìn)行分類等。通過設(shè)置權(quán)限的方式,避免一些用戶不希望其他人看到的數(shù)據(jù)被訪問,進(jìn)一步提高用戶數(shù)據(jù)的安全性以及java反射的合理性。

此外,本發(fā)明實(shí)施例還提出一種計(jì)算機(jī)可讀存儲介質(zhì),所述計(jì)算機(jī)可讀存儲介質(zhì)上存儲有java反射控制程序,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下操作:

在接收到j(luò)ava反射請求時(shí),確定所述java反射請求對應(yīng)的java反射;

確定所述java反射自定義靜態(tài)方法allowrelect的屬性;

在所述屬性為允許反射時(shí),執(zhí)行所述java反射;

在所述屬性為拒絕反射時(shí),拒絕所述java反射,并報(bào)錯。

進(jìn)一步地,所述確定所述java反射自定義靜態(tài)方法allowrelect的屬性的步驟之后,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下操作:

在所述屬性為拒絕反射時(shí),確定所述java反射所需要反射的類;

判斷所述java反射所需要反射的類是否在禁止反射的類列表中;

若是,拒絕所述java反射,并報(bào)錯;

若否,執(zhí)行所述java反射。

進(jìn)一步地,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下操作:

在反射的入口類設(shè)置自定義靜態(tài)方法allowrelect,并設(shè)置禁止反射的類列表disableclasnamelist;

在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷。

進(jìn)一步地,所述在class模塊的forname方法中加入自定義靜態(tài)方法allowrelectflag和禁止反射的類列表disableclasname的判斷的步驟之前,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下操作:

確定系統(tǒng)中隱藏?cái)?shù)據(jù)對應(yīng)的類;

將所確定的類構(gòu)建成禁止反射的類列表disableclasnamelist。

進(jìn)一步地,所述判斷所述java反射所需要反射的類是否在禁止反射的類列表中的步驟之后,所述java反射控制程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如下操作:

在所述java反射所需要反射的類不在禁止反射的類列表中時(shí),判斷所述java反射對應(yīng)的訪問應(yīng)用是否設(shè)置權(quán)限;

若所述訪問應(yīng)用未設(shè)置權(quán)限,則執(zhí)行所述java反射。

需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者系統(tǒng)中還存在另外的相同要素。

上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。

通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在如上所述的一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,電視,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述的方法。

以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1