專利名稱:大型bs結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種資源控制方法,具體的說,涉及了一種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法。
背景技術(shù):
在任何一個(gè)大型BS結(jié)構(gòu)系統(tǒng)開發(fā)過程中,都要涉及對(duì)用戶的權(quán)限管理,目前通常使用的方法有兩種,一是直接用戶一權(quán)限,另一種是用戶一角色一權(quán)限,但無論哪種方法都離不開對(duì)權(quán)限的定義,即對(duì)系統(tǒng)中的各種資源進(jìn)行分解和定義。目前通常采用的方法是將資源定義為一個(gè)字符串標(biāo)識(shí),通過該字符串能夠唯一確定一種操作權(quán)限,這個(gè)權(quán)限可能是某個(gè)按鈕是否可見,亦或?qū)δ承┲匾獢?shù)據(jù)能否修改,軟件開發(fā)人員在軟件開發(fā)時(shí)就對(duì)權(quán)限進(jìn)行定義,在編碼過程中調(diào)用權(quán)限驗(yàn)證的代碼進(jìn)行判斷。這類資源控制方法有著較大的缺陷,具體分析如下1、權(quán)限控制過于分散在系統(tǒng)的開發(fā)過程中,開發(fā)人員不僅要關(guān)于業(yè)務(wù)及流程,同時(shí)也要對(duì)各種權(quán)限進(jìn)行定義和控制,權(quán)限控制代碼分散在系統(tǒng)的各個(gè)模塊中,不能進(jìn)行集中管理,導(dǎo)致權(quán)限控制過于隨意化,不易做到統(tǒng)一管理,當(dāng)模塊間出現(xiàn)相互調(diào)用時(shí)將會(huì)出現(xiàn)權(quán)限不易界定的現(xiàn)象。2、增加了代碼復(fù)雜度因?yàn)闄?quán)限部分只負(fù)責(zé)根據(jù)用戶所擁有的權(quán)限對(duì)當(dāng)前權(quán)限進(jìn)行判定,所以軟件開發(fā)人員就要編寫大量的邏輯判斷代碼,導(dǎo)致系統(tǒng)中存在大量的判斷和分支結(jié)構(gòu),增加了代碼的邏輯復(fù)雜度,同時(shí)也加大了系統(tǒng)bug出現(xiàn)的概率。3、容易發(fā)生資源漏控在系統(tǒng)應(yīng)用的過程中,通常會(huì)分為用戶界面(UI)和后臺(tái)數(shù)據(jù)操作兩部分,為了增強(qiáng)用戶的體驗(yàn),就需要將權(quán)限的控制在用戶界面(UI)和后臺(tái)數(shù)據(jù)操作進(jìn)行雙重控制,增加了開發(fā)人員的工作量。更有一些系統(tǒng),只對(duì)用戶界面進(jìn)行了控制,未對(duì)后臺(tái)的數(shù)據(jù)操作進(jìn)行控制,這樣就不可避免模擬URL訪問對(duì)系統(tǒng)的資源進(jìn)行修改,達(dá)不到保護(hù)數(shù)據(jù)安全性的目的。4、維護(hù)性差在管理信息系統(tǒng)中,系統(tǒng)的功能一般情況下是按照菜單進(jìn)行劃分的,而在定義權(quán)限時(shí)只是對(duì)應(yīng)的一個(gè)個(gè)特定字符串,與菜單無任何直接關(guān)系,給權(quán)限分配人員增加了維護(hù)難度。為了解決以上存在的問題,人們一直在尋求一種理想的技術(shù)解決方案。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的不足,從而提供一種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法,該控制方法能夠?qū)?quán)限控制的代碼進(jìn)行集中,同時(shí)大大降低代碼復(fù)雜度,有效杜絕資源漏控現(xiàn)象,提高權(quán)限維護(hù)界面的人性化和維護(hù)效率。為了實(shí)現(xiàn)上述目的,本發(fā)明所采用的技術(shù)方案是一種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法,在于系統(tǒng)中設(shè)置功能菜單,菜單為樹型結(jié)構(gòu),每個(gè)菜單對(duì)應(yīng)一些功能的組合,每個(gè)菜單可以有I個(gè)以上的功能,每項(xiàng)功能有名稱和英文碼;
系統(tǒng)使用Struts2框架處理用戶請(qǐng)求,在編寫Action類時(shí)遵循以下規(guī)則在菜單中定義的功能項(xiàng),在Action中要以英文簡(jiǎn)稱做為方法名;對(duì)于同一功能有多于I個(gè)頁面時(shí),要在 同一個(gè)方法內(nèi)進(jìn)行邏輯判斷和處理;在系統(tǒng)中增加權(quán)限判斷的Filter,對(duì)請(qǐng)求URL進(jìn)行分析并過濾,此時(shí)URL由基礎(chǔ)URL+功能英文碼+其它參數(shù)組成,首先將URL進(jìn)行分解,分解出基礎(chǔ)URL和功能英文碼,通過基礎(chǔ)URL在菜單中查找對(duì)應(yīng)的菜單,然后根據(jù)菜單+功能英文碼+當(dāng)前登錄用戶信息判定該用戶是否有權(quán)限訪問URL,在判斷時(shí)根據(jù)以下順序
步驟I、如果菜單ID為空,表示該URL不在權(quán)限控制范圍之內(nèi),通過,否則繼續(xù)下一步;步驟2、根據(jù)菜單ID和用戶ID取出對(duì)應(yīng)的權(quán)限列表,如果列表為空,則表示用戶無此權(quán)限,轉(zhuǎn)向權(quán)限錯(cuò)誤頁面,否則繼續(xù)下一步;
步驟3、根據(jù)菜單ID取出菜單所有功能列表,如功能英文碼不在此列表內(nèi),表示此功能不在功能控制之內(nèi),只要用戶有此菜單的查看權(quán)限即可,通過,否則繼續(xù)下一步;
步驟4、判斷步驟2得到的權(quán)限列表中是否包含功能英文碼代碼的功能,如果有則通過,否則轉(zhuǎn)向權(quán)限錯(cuò)誤頁面。本發(fā)明相對(duì)現(xiàn)有技術(shù)具有突出的實(shí)質(zhì)性特點(diǎn)和顯著進(jìn)步,具體的說,該方法有以下優(yōu)點(diǎn)
I、將權(quán)限控制代碼集中,減少代碼污染采用本方法后,只需在菜單管理中增加部分代碼,在權(quán)限過濾器中修改權(quán)限驗(yàn)證方法,即可達(dá)到對(duì)整個(gè)系統(tǒng)的所有資源進(jìn)行控制的方法,將原來分散在各處的權(quán)限控制代碼集中到一起,讓程序員可以專注于業(yè)務(wù)流程的開發(fā)。2、最大程度上避免資源漏控本方法對(duì)系統(tǒng)的URL進(jìn)行監(jiān)控,無論是前臺(tái)展示還是后臺(tái)數(shù)據(jù)保存,都在本方法的控制范圍之內(nèi),不存在因?yàn)槌绦騿T漏寫了后臺(tái)驗(yàn)證代碼從而導(dǎo)致資源漏控的現(xiàn)象。3、提高系統(tǒng)權(quán)限的可維護(hù)性本方法中將抽象的功能具體到系統(tǒng)菜單上,給系統(tǒng)維護(hù)人員以直觀的認(rèn)知,達(dá)到了所見即所得的目的,讓系統(tǒng)維護(hù)人員脫離了菜單一功能一權(quán)限對(duì)照的重復(fù)勞動(dòng),提高了系統(tǒng)維護(hù)人員的工作效率。
具體實(shí)施例方式下面通過具體實(shí)施方式
,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。一種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法,在于系統(tǒng)中設(shè)置功能菜單,菜單為樹型結(jié)構(gòu),每個(gè)菜單對(duì)應(yīng)一些功能的組合,每個(gè)菜單可以有I個(gè)以上的功能,每項(xiàng)功能有名稱和英文碼;
系統(tǒng)使用Struts2框架處理用戶請(qǐng)求,在編寫Action類時(shí)遵循以下規(guī)則在菜單中定義的功能項(xiàng),在Action中要以英文簡(jiǎn)稱做為方法名;對(duì)于同一功能有多于I個(gè)頁面時(shí),要在同一個(gè)方法內(nèi)進(jìn)行邏輯判斷和處理(如添加包括打開添加頁面和保存添加信息兩個(gè)功能,此時(shí)需要根據(jù)其它參數(shù)對(duì)用戶請(qǐng)求進(jìn)行判斷并處理);在系統(tǒng)中增加權(quán)限判斷的Filter,對(duì)請(qǐng)求URL進(jìn)行分析并過濾,此時(shí)URL由基礎(chǔ)URL+功能英文碼+其它參數(shù)組成,首先將URL進(jìn)行分解,分解出基礎(chǔ)URL和功能英文碼,通過基礎(chǔ)URL在菜單中查找對(duì)應(yīng)的菜單,然后根據(jù)菜單+功能英文碼+當(dāng)前登錄用戶信息判定該用戶是否有權(quán)限訪問URL,在判斷時(shí)根據(jù)以下順序
步驟I、如果菜單ID為空,表示該URL不在權(quán)限控制范圍之內(nèi),通過,否則繼續(xù)下一步;步驟2、根據(jù)菜單ID和用戶ID取出對(duì)應(yīng)的權(quán)限列表,如果列表為空,則表示用戶無此權(quán)限,轉(zhuǎn)向權(quán)限錯(cuò)誤頁面,否則繼續(xù)下一步;
步驟3、根據(jù)菜單ID取出菜單所有功能列表,如功能英文碼不在此列表內(nèi),表示此功能不在功能控制之內(nèi),只要用戶有此菜單的查看權(quán)限即可,通過,否則繼續(xù)下一步;
步驟4、判斷步驟2得到的權(quán)限列表中是否包含功能英文碼代碼的功能,如果有則通過,否則轉(zhuǎn)向權(quán)限錯(cuò)誤頁面。技術(shù)原理JavaEE開發(fā)的B/S結(jié)構(gòu)程序,使用Struts2框架處理用戶請(qǐng)求。在BS結(jié)構(gòu)的系統(tǒng)中,任何一個(gè)功能均對(duì)應(yīng)一個(gè)或多個(gè)URL,對(duì)URL進(jìn)行控制就控制了系統(tǒng)的入口,用戶不可能繞過這道防線對(duì)系統(tǒng)進(jìn)行越權(quán)訪問。所以通過本方法對(duì)URL按指定規(guī)則進(jìn)行限制,最大程度上限制了用戶的權(quán)限,使系統(tǒng)的權(quán)限控制達(dá)到了精細(xì)化的目的,而且減少了權(quán)限管理對(duì)系統(tǒng)其它代碼的污染。系統(tǒng)中使用Struts2可使系統(tǒng)URL具有明顯的可分析性,能夠簡(jiǎn)單的解析出URL所代表的基礎(chǔ)URL和功能英文碼。但使用其它技術(shù)時(shí),將本方法進(jìn)行稍加改動(dòng)即可適用。最后應(yīng)當(dāng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案而非對(duì)其限制;盡管參照較佳實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對(duì)本發(fā)明的具體實(shí)施方式
進(jìn)行修改或者對(duì)部分技術(shù)特征進(jìn)行等同替換;而不脫離本發(fā) 明技術(shù)方案的精神,其均應(yīng)涵蓋在本發(fā)明請(qǐng)求保護(hù)的技術(shù)方案范圍當(dāng)中。
權(quán)利要求
1.ー種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法,其特征在于系統(tǒng)中設(shè)置功能菜單,菜單為樹型結(jié)構(gòu),每個(gè)菜單對(duì)應(yīng)ー些功能的組合,每個(gè)菜單可以有I個(gè)以上的功能,每項(xiàng)功能有名稱和英文碼;系統(tǒng)使用Struts2框架處理用戶請(qǐng)求,在編寫Action類時(shí)遵循以下規(guī)則在菜單中定義的功能項(xiàng),在Action中要以英文簡(jiǎn)稱做為方法名;對(duì)于同一功能有多于I個(gè)頁面時(shí),要在同一個(gè)方法內(nèi)進(jìn)行邏輯判斷和處理;在系統(tǒng)中增加權(quán)限判斷的Filter,對(duì)請(qǐng)求URL進(jìn)行分析并過濾,此時(shí)URL由基礎(chǔ)URL+功能英文碼+其它參數(shù)組成,首先將URL進(jìn)行分解,分解出基礎(chǔ)URL和功能英文碼,通過基礎(chǔ)URL在菜單中查找對(duì)應(yīng)的菜単,然后根據(jù)菜單+功能英文碼+當(dāng)前登錄用戶信息判定該用戶是否有權(quán)限訪問URL,在判斷時(shí)根據(jù)以下順序步驟I、如果菜單ID為空,表示該URL不在權(quán)限控制范圍之內(nèi),通過,否則繼續(xù)下一步;步驟2、根據(jù)菜單ID和用戶ID取出對(duì)應(yīng)的權(quán)限列表,如果列表為空,則表示用戶無此權(quán)限,轉(zhuǎn)向權(quán)限錯(cuò)誤頁面,否則繼續(xù)下一歩;步驟3、根據(jù)菜單ID取出菜單所有功能列表,如功能英文碼不在此列表內(nèi),表示此功能不在功能控制之內(nèi),只要用戶有此菜單的查看權(quán)限即可,通過,否則繼續(xù)下一歩;步驟4、判斷步驟2得到的權(quán)限列表中是否包含功能英文碼代碼的功能,如果有則通過,否則轉(zhuǎn)向權(quán)限錯(cuò)誤頁面。
全文摘要
本發(fā)明提供一種大型BS結(jié)構(gòu)系統(tǒng)中對(duì)資源的控制方法,主要在于如何判斷是否有權(quán)限訪問URL如果菜單ID為空,表示該URL不在權(quán)限控制范圍之內(nèi),通過,否則繼續(xù)下一步;根據(jù)菜單ID和用戶ID取出對(duì)應(yīng)的權(quán)限列表,如果列表為空,則表示用戶無此權(quán)限,轉(zhuǎn)向權(quán)限錯(cuò)誤頁面,否則繼續(xù)下一步;根據(jù)菜單ID取出菜單所有功能列表,如功能英文碼不在此列表內(nèi),表示此功能不在功能控制之內(nèi),只要用戶有此菜單的查看權(quán)限即可,通過,否則繼續(xù)下一步;判斷第二步得到的權(quán)限列表中是否包含功能英文碼代碼的功能,如果有則通過,否則轉(zhuǎn)向權(quán)限錯(cuò)誤頁面。該方法能夠?qū)?quán)限控制的代碼進(jìn)行集中,同時(shí)降低代碼復(fù)雜度,有效杜絕資源漏控現(xiàn)象。
文檔編號(hào)G06F9/44GK102682240SQ20121015118
公開日2012年9月19日 申請(qǐng)日期2012年5月16日 優(yōu)先權(quán)日2012年5月16日
發(fā)明者宋帥杰, 陳路全 申請(qǐng)人:河南輝煌科技股份有限公司