本發(fā)明涉及一種前端數(shù)據(jù)持久化存儲方法、系統(tǒng)及程序,尤其涉及一種網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲方法、系統(tǒng)及程序。
背景技術(shù):
1、網(wǎng)絡(luò)靶場(cyber?range)是一種將真實網(wǎng)絡(luò)空間中的網(wǎng)絡(luò)架構(gòu)、系統(tǒng)設(shè)備、業(yè)務(wù)流程的運行狀態(tài)及運行環(huán)境等進行模擬和復(fù)現(xiàn)的技術(shù)。
2、網(wǎng)絡(luò)靶場的應(yīng)用場景是針對不同行業(yè)、不同業(yè)務(wù)場景的定制化訓(xùn)練和檢驗平臺。在實訓(xùn)演練過程中,訓(xùn)練人員需要建立多種演練模板場景進行實戰(zhàn)演練,為了避免在創(chuàng)建演練模板數(shù)據(jù)過程中數(shù)據(jù)的丟失,需要將輸入的演練數(shù)據(jù)進行持久化存儲,便于后續(xù)的數(shù)據(jù)找回。
3、目前前端常見的存儲方式有sessionstorage和localstorage等,sessionstorage是html5新增的一個臨時會話存儲對象,用于臨時保存同一窗口,可以將數(shù)據(jù)進行短暫的存儲,當(dāng)瀏覽器關(guān)閉時數(shù)據(jù)就會丟失;localstorage是一種web存儲技術(shù),允許用戶在瀏覽器中以鍵值對的形式存儲數(shù)據(jù),數(shù)據(jù)可以長期存儲,不會因為瀏覽器關(guān)閉導(dǎo)致數(shù)據(jù)丟失,但是sessionstorage和localstorage的存儲空間是有限的,sessionstorage和localstorage對于目前的主流瀏覽器只能存儲5mb的數(shù)據(jù),對于存儲大容量的訓(xùn)練數(shù)據(jù)的需求無法滿足。
技術(shù)實現(xiàn)思路
1、發(fā)明目的:針對上述現(xiàn)有技術(shù)存在的問題,本發(fā)明目的在于提供一種可以存儲大量結(jié)構(gòu)化數(shù)據(jù)的網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲方法、系統(tǒng)及程序,滿足了大容量訓(xùn)練數(shù)據(jù)的存儲需求。
2、技術(shù)方案:為實現(xiàn)上述發(fā)明目的,本發(fā)明采用如下技術(shù)方案:
3、本發(fā)明所述的網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲方法,包括以下步驟:
4、步驟1:初始化indexeddb數(shù)據(jù)庫;
5、步驟2:基于初始化好的indexeddb數(shù)據(jù)庫,用戶創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板,根據(jù)訓(xùn)練模板對應(yīng)的不同的持久化操作類型傳遞不同的標識類型給indexeddb,indexeddb通過接收到的持久化操作類型和網(wǎng)絡(luò)靶場訓(xùn)練模版的類型,為不同的訓(xùn)練模版創(chuàng)建對應(yīng)的數(shù)據(jù)庫,對數(shù)據(jù)庫中的數(shù)據(jù)進行各類型持久化操作;具體為,
6、開啟定時器,使用indexeddb.dboperation()方法進行各類型操作,實時更新數(shù)據(jù)庫的數(shù)據(jù);
7、定義readtype變量判斷當(dāng)前操作模式;
8、使用res.transaction(storename,readtype).objectstore(storename)處理數(shù)據(jù)的讀寫權(quán)限;其中,storename為數(shù)據(jù)庫名稱;
9、使用objectstore[type](data)對數(shù)據(jù)庫中的數(shù)據(jù)進行更新;其中,type為持久化操作的類型,data為數(shù)據(jù)庫中的數(shù)據(jù);
10、使用onsuccess或onerror返回數(shù)據(jù)庫更新成功或失敗的結(jié)果。
11、進一步地,所述步驟1中具體為,
12、通過window.indexeddb獲取到indexeddb對象,并對不同的瀏覽器進行兼容處理;
13、使用indexeddb的open方法開啟數(shù)據(jù)庫連接connection;
14、使用connection.onupgradeneeded處理indexeddb數(shù)據(jù)庫打開鏈接或者版本發(fā)生變化的邏輯;
15、使用db.createobjectstore(),創(chuàng)建數(shù)據(jù)庫集合;
16、使用connection的onsuccess和onerror方法處理數(shù)據(jù)庫初始化成功和失敗的返回結(jié)果。
17、進一步地,所述
18、步驟2所述創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板,包括新增訓(xùn)練模板、填寫基礎(chǔ)信息、繪制網(wǎng)絡(luò)拓撲和編排訓(xùn)練任務(wù);
19、所述新增訓(xùn)練模板,具體為,用戶選擇新增訓(xùn)練模板,通過indexeddb.dboperation(tempname,’get’)判斷是否可以查詢到上一次未保存的信息,其中tempname為模版類型,取值為single、team、red、topo或range,分別表示單兵訓(xùn)練、團隊訓(xùn)練、紅藍對抗、拓撲模板和靶場測評;當(dāng)可查詢到,詢問是否恢復(fù),如選擇恢復(fù)則將上一次未保存的數(shù)據(jù)展示出來;如不恢復(fù)或未查詢到上一次未保存的信息,則跳轉(zhuǎn)到空的團隊訓(xùn)練模板,并開啟定時器調(diào)用indexeddb.dboperation(tempname,’add’,data)實時存儲輸入的信息,通過不同參數(shù)區(qū)分是新增模板或編輯模板,如是新增模板則將第二個參數(shù)確認add,如是編輯模板則將第二個參數(shù)確認edit;
20、所述填寫基礎(chǔ)信息,具體為,輸入模板名稱和模板描述信息,選擇訓(xùn)練難度和訓(xùn)練類型,選擇訓(xùn)練人員的數(shù)量;
21、所述繪制網(wǎng)絡(luò)拓撲,用戶選擇各類型網(wǎng)絡(luò)設(shè)備和終端設(shè)備并實現(xiàn)網(wǎng)絡(luò)連接,將過程中的數(shù)據(jù)通過indexeddb.dboperation(tempname,’add’,data)進行存儲;
22、所述編排訓(xùn)練任務(wù),具體為,根據(jù)訓(xùn)練需求添加對應(yīng)的任務(wù),并通過indexeddb.dboperation(tempname,’add’,data)進行存儲;
23、所述新增訓(xùn)練模板,還包括,當(dāng)用戶選擇恢復(fù)上一次未保存的數(shù)據(jù),則通過定義一個變量mycachelist記錄緩存信息,將mycachelist已經(jīng)存在的數(shù)據(jù)展示,使用變量idkey記錄該緩存的唯一標識id,令后續(xù)通過indexeddb.dboperation(tempname,’add’,data)來存儲信息都將idkey放到data中進行數(shù)據(jù)的區(qū)分;
24、所述創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板還包括,在創(chuàng)建完成后,可以進行模板數(shù)據(jù)的保存,數(shù)據(jù)保存后再通過調(diào)用indexeddb.dboperation(tempname,delete,idkey),將當(dāng)前idkey對應(yīng)的數(shù)據(jù)從緩存中進行刪除。
25、進一步地,步驟2所述持久化操作的類型,包括增加,刪除,修改和查詢。
26、基于相同的發(fā)明構(gòu)思,本發(fā)明還提供了一種網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲系統(tǒng),包括:
27、初始化模塊,用于初始化indexeddb數(shù)據(jù)庫;
28、操作模塊,用于基于初始化好的indexeddb數(shù)據(jù)庫,用戶創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板,根據(jù)訓(xùn)練模板對應(yīng)的不同的持久化操作類型傳遞不同的標識類型給indexeddb,indexeddb通過接收到的持久化操作類型和網(wǎng)絡(luò)靶場訓(xùn)練模版的類型,為不同的訓(xùn)練模版創(chuàng)建對應(yīng)的數(shù)據(jù)庫,對數(shù)據(jù)庫中的數(shù)據(jù)進行各類型持久化操作;具體為,
29、開啟定時器,使用indexeddb.dboperation()方法進行各類型操作,實時更新數(shù)據(jù)庫的數(shù)據(jù);
30、定義readtype變量判斷當(dāng)前操作模式;
31、使用res.transaction(storename,readtype).objectstore(storename)處理數(shù)據(jù)的讀寫權(quán)限;其中,storename為數(shù)據(jù)庫名稱;
32、使用objectstore[type](data)對數(shù)據(jù)庫中的數(shù)據(jù)進行更新;其中,type為持久化操作的類型,data為數(shù)據(jù)庫中的數(shù)據(jù);
33、使用onsuccess或onerror返回數(shù)據(jù)庫更新成功或失敗的結(jié)果。
34、進一步地,所述初始化模塊具體實現(xiàn)方法為,
35、通過window.indexeddb獲取到indexeddb對象,并對不同的瀏覽器進行兼容處理;
36、使用indexeddb的open方法開啟數(shù)據(jù)庫連接connection;
37、使用connection.onupgradeneeded處理indexeddb數(shù)據(jù)庫打開鏈接或者版本發(fā)生變化的邏輯;
38、使用db.createobjectstore(),創(chuàng)建數(shù)據(jù)庫集合;
39、使用connection的onsuccess和onerror方法處理數(shù)據(jù)庫初始化成功和失敗的返回結(jié)果。
40、進一步地,所述操作模塊創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板包括,新增訓(xùn)練模板、填寫基礎(chǔ)信息、繪制網(wǎng)絡(luò)拓撲和編排訓(xùn)練任務(wù);
41、所述新增團隊訓(xùn)練模板,具體為,用戶選擇新增訓(xùn)練模板,通過indexeddb.dboperation(tempname,’get’)判斷是否可以查詢到上一次未保存的信息,其中tempname為模版類型,取值為single、team、red、topo或range,分別表示單兵訓(xùn)練、團隊訓(xùn)練、紅藍對抗、拓撲模板和靶場測評;當(dāng)可查詢到,詢問是否恢復(fù),如選擇恢復(fù)則將上一次未保存的數(shù)據(jù)展示出來;如不恢復(fù)或未查詢到上一次未保存的信息,則跳轉(zhuǎn)到空的團隊訓(xùn)練模板,并開啟定時器調(diào)用indexeddb.dboperation(tempname,’add’,data)實時存儲輸入的信息,通過不同參數(shù)區(qū)分是新增模板或編輯模板,如是新增模板則將第二個參數(shù)確認add,如是編輯模板則將第二個參數(shù)確認edit;
42、所述填寫基礎(chǔ)信息,具體為,輸入模板名稱和模板描述信息,選擇訓(xùn)練難度和訓(xùn)練類型,選擇訓(xùn)練人員的數(shù)量;
43、所述繪制網(wǎng)絡(luò)拓撲,用戶選擇各類型網(wǎng)絡(luò)設(shè)備和終端設(shè)備并實現(xiàn)網(wǎng)絡(luò)連接,將過程中的數(shù)據(jù)通過indexeddb.dboperation(tempname,’add’,data)進行存儲;
44、所述編排訓(xùn)練任務(wù),具體為,根據(jù)訓(xùn)練需求添加對應(yīng)的任務(wù),并通過indexeddb.dboperation(tempname,’add’,data)進行存儲;
45、所述新增團隊訓(xùn)練模板,還包括,當(dāng)用戶選擇恢復(fù)上一次未保存的數(shù)據(jù),則通過定義一個變量mycachelist記錄緩存信息,將mycachelist已經(jīng)存在的數(shù)據(jù)展示,使用變量idkey記錄該緩存的唯一標識id,令后續(xù)通過indexeddb.dboperation(tempname,’add’,data)來存儲信息都將idkey放到data中進行數(shù)據(jù)的區(qū)分;
46、所述創(chuàng)建網(wǎng)絡(luò)靶場的訓(xùn)練模板還包括,在創(chuàng)建完成后,可以進行模板數(shù)據(jù)的保存,可以進行模板數(shù)據(jù)的保存,數(shù)據(jù)保存后再通過調(diào)用indexeddb.dboperation(tempname,delete,idkey),將當(dāng)前idkey對應(yīng)的數(shù)據(jù)從緩存中進行刪除。
47、進一步地,所述操作模塊的持久化操作的類型,包括增加,刪除,修改和查詢。
48、基于相同的發(fā)明構(gòu)思,本發(fā)明還提供了一種計算機系統(tǒng),包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述計算機程序被加載至處理器時實現(xiàn)根據(jù)上述任一項所述的網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲方法的步驟。
49、基于相同的發(fā)明構(gòu)思,本發(fā)明還提供了一種計算機程序產(chǎn)品,包括計算機程序/指令,該計算機程序/指令被處理器執(zhí)行時實現(xiàn)根據(jù)上述任一項所述的網(wǎng)絡(luò)靶場前端數(shù)據(jù)持久化存儲方法的步驟。
50、有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明通過基于indexeddb對訓(xùn)練模板數(shù)據(jù)進行實時持久化存儲,通過indexeddb的open方法來開啟一個數(shù)據(jù)庫連接connection,在connection.onupgradeneeded的數(shù)據(jù)庫打開鏈接或者版本發(fā)生變化的回調(diào)方法中,使用db.createobjectstore()創(chuàng)建數(shù)據(jù)庫集合;每次用戶在輸入訓(xùn)練模板信息時間,開啟一個定時器,使用indexeddb.dboperation(tempname,’add’,data)方法向數(shù)據(jù)庫發(fā)送修改的指令,數(shù)據(jù)庫通過objectstore[type](data)來處理接收到的指令,最終在onsuccess回調(diào)中得到返回的結(jié)果,這樣用戶就能夠在未保存訓(xùn)練數(shù)據(jù)的情況下或者瀏覽器閃退等不可預(yù)估的情況下,從而能夠找回歷史編輯的數(shù)據(jù)。