許滔(同濟(jì)大學(xué),上海 201800)
XU Tao(School of Electronic and Information Engineering,Tongji University,Shanghai 201800)
基于Shiro的移動(dòng)應(yīng)用權(quán)限控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
許滔
(同濟(jì)大學(xué),上海201800)
隨著移動(dòng)互聯(lián)網(wǎng)高速發(fā)展,越來(lái)越多的傳統(tǒng)企業(yè)和軟件被影響甚至被顛覆。移動(dòng)互聯(lián)網(wǎng)很多特有的性質(zhì)不同于傳統(tǒng)Web服務(wù)。首先是移動(dòng)性,每個(gè)終端都擺脫了網(wǎng)線和電源線的依賴,能夠做到隨時(shí)隨地上網(wǎng),這也就導(dǎo)致了碎片化上網(wǎng)這個(gè)特點(diǎn)。其次就是本地化,移動(dòng)端能夠通過(guò)多種定位方式來(lái)獲取豐富的LBS服務(wù),這也帶來(lái)了位置信息隱私安全的問(wèn)題。權(quán)限控制系統(tǒng)作為后臺(tái)系統(tǒng)中重要的組成部分,有很多成熟的框架,例如Spring Security、Apache Shiro等,但是這些框架都是針對(duì)Web應(yīng)用的,雖然具有身份認(rèn)證、授權(quán)、會(huì)話管理、加密等安全模塊,都是基于角色訪問(wèn)控制(RBAC)來(lái)實(shí)現(xiàn)的,但是對(duì)于移動(dòng)互聯(lián)網(wǎng)的特性支持的并不多,需要在這些框架的基礎(chǔ)上做出擴(kuò)展。本文是基于常用的權(quán)限控制框架Apache Shiro,結(jié)合移動(dòng)互聯(lián)網(wǎng)的特性,擴(kuò)展了該框架對(duì)動(dòng)態(tài)URL的支持、位置支持和其他相關(guān)移動(dòng)特性支持。
基于Shrio的移動(dòng)應(yīng)用權(quán)限控制系統(tǒng)繼承了Shrio的權(quán)限控制模型,利用Shrio提供的安全管理器實(shí)現(xiàn)用戶訪問(wèn)的身份認(rèn)證和授權(quán)管理,系統(tǒng)必須集成Shrio并提供所需要的用戶、角色、權(quán)限域。系統(tǒng)管理員能夠根據(jù)規(guī)則輸入不同過(guò)濾器動(dòng)態(tài)地控制移動(dòng)端對(duì)接口的訪問(wèn)控制。
1.1系統(tǒng)的功能需求分析
為了實(shí)現(xiàn)對(duì)RESTful API的動(dòng)態(tài)權(quán)限控制,后端提供的接口必須完全遵守Restful標(biāo)準(zhǔn),每個(gè)URI對(duì)應(yīng)一種資源,客戶端通過(guò)不同的HTTP動(dòng)詞來(lái)操作服務(wù)器,使得服務(wù)器端發(fā)生狀態(tài)轉(zhuǎn)移。每個(gè)定義的URI必須結(jié)構(gòu)清晰易于了解,能夠方便擴(kuò)展。HTTP的4個(gè)動(dòng)詞:GET、POST、PUT、DELETE依次對(duì)應(yīng)4重基本操作獲取資源、新建資源、更新資源、刪除資源,也依次對(duì)應(yīng)于Shiro中資源的權(quán)限view、create、update、delete。POST和PUT操作都可以用于更新資源,但是由于PUT操作具有冪等性,更符合更新操作的影響?;谝陨霞s定,系統(tǒng)需要支持對(duì)URI的模式匹配,每個(gè)URI模式對(duì)應(yīng)的動(dòng)詞也能設(shè)置多個(gè)。設(shè)置過(guò)濾器定義后,系統(tǒng)能夠動(dòng)態(tài)更新原有的過(guò)濾器鏈,能及時(shí)更新權(quán)限控制模塊。
移動(dòng)端位置信息的權(quán)限控制需要移動(dòng)端的請(qǐng)求中帶上經(jīng)緯度的參數(shù),能夠根據(jù)位置信息進(jìn)行多種方式的權(quán)限控制,包括基于距離的和區(qū)域的控制。因此,每個(gè)需要進(jìn)行位置權(quán)限控制的資源都需要配置位置控制信息。調(diào)用失敗時(shí),返回?zé)o權(quán)限的原因。
1.2系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)
基于Shiro的移動(dòng)應(yīng)用權(quán)限控制系統(tǒng)的總體架構(gòu)如圖1所示:
圖1
整個(gè)系統(tǒng)分成了數(shù)據(jù)訪問(wèn)、業(yè)務(wù)邏輯、資源服務(wù)、表現(xiàn)層4個(gè)層次。
(1)數(shù)據(jù)訪問(wèn)層,提供對(duì)數(shù)據(jù)庫(kù)操作定義,封裝數(shù)據(jù)庫(kù)細(xì)節(jié),為業(yè)務(wù)邏輯層提供數(shù)據(jù)。
(2)業(yè)務(wù)邏輯層,按照高內(nèi)聚低耦合的原則設(shè)計(jì)的,包含了過(guò)濾器動(dòng)態(tài)管理、權(quán)限控制管理、地理位置信息管理等主要邏輯模塊。
(3)資源服務(wù)模塊,提供Restful API給Web端或者移動(dòng)App終端調(diào)用。
(4)表現(xiàn)層,管理員后臺(tái)管理系統(tǒng)或者移動(dòng)端應(yīng)用界面。
Shiro對(duì)Servlet容器的攔過(guò)濾器鏈進(jìn)行了代理,ShiroFilter在Servlet容器的過(guò)濾器鏈執(zhí)行之前,通過(guò)代理,先執(zhí)行Shiro自己的過(guò)濾器體系,然后進(jìn)行容器級(jí)別的過(guò)濾器。本系統(tǒng)通過(guò)過(guò)濾器管理模塊自定義并動(dòng)態(tài)更新Shiro過(guò)濾器,通過(guò)移動(dòng)權(quán)限管理模塊來(lái)實(shí)現(xiàn)對(duì)API權(quán)限控制,以及基于LBS的權(quán)限控制。
2.4過(guò)濾器管理
定義過(guò)濾器的數(shù)據(jù)結(jié)構(gòu)為:
這是定義過(guò)濾器的數(shù)據(jù)結(jié)構(gòu),根據(jù)管理員在Web端配置并持久化到數(shù)據(jù)庫(kù)。type和lbsType字段用于區(qū)分過(guò)濾器的不同模式,對(duì)URI的權(quán)限控制有只針對(duì)URI和URI+方法兩種模式,對(duì)位置的權(quán)限控制有距離和區(qū)域兩種模式;name字段是名稱;url字段是基于Ant path匹配原則的URI模式,一個(gè)模式可以匹配多個(gè)URI;method是HTTP方法字段,可以有多個(gè)用逗號(hào)連接;roles和permissions是Shiro的角色和權(quán)限;loca鄄tion和distance是資源的權(quán)限控制位置和有效距離,用戶位置到資源位置不超過(guò)有效距離則才有權(quán)限訪問(wèn)該資源;area是資源區(qū)域,用戶位置處于資源區(qū)域時(shí)才有權(quán)限訪問(wèn)該資源。
通過(guò)以上規(guī)則定義,對(duì)于每條記錄,過(guò)濾器管理系統(tǒng)能夠向Shiro的過(guò)濾器鏈中加入不同的過(guò)濾器,當(dāng)有請(qǐng)求到達(dá)時(shí),Shrio調(diào)用自定義的PathMatchingFilter鄄ChainResolver類的getChain()方法得到所有與當(dāng)前請(qǐng)求路徑匹配的過(guò)濾器,并調(diào)用過(guò)濾器管理系統(tǒng)的代理方法得到所有的過(guò)濾器進(jìn)行處理。
2.2權(quán)限管理
RESTful API和位置信息的權(quán)限控制主要是通過(guò)實(shí)現(xiàn)FilterService接口實(shí)現(xiàn)的:據(jù)Request請(qǐng)求構(gòu)建后面權(quán)限驗(yàn)證所需的RESTful API 和 Location信息;getMachedUrlFilter方法用于根據(jù)HTTP方法和獲取所有自定義的UrlFilter對(duì)象,再根據(jù)Ant path匹配當(dāng)前請(qǐng)求的路徑,返回列表集合;check鄄Params方法校驗(yàn)請(qǐng)求的參數(shù),當(dāng)請(qǐng)求參數(shù)不合法時(shí),過(guò)濾器會(huì)攔截請(qǐng)求,并返回參數(shù)異常原因;checkRequest方法進(jìn)行權(quán)限控制,兩種不同的權(quán)限控制有不同的實(shí)現(xiàn)子類。抽象類AbstractFilterService實(shí)現(xiàn)了前面幾個(gè)公用方法,RestFilterService和LbsFilterService兩個(gè)子類實(shí)現(xiàn)各種的權(quán)限控制方法。
RestFilterService的權(quán)限控制策略是,獲取所有過(guò)濾器中的角色集合和權(quán)限集合,當(dāng)前用戶只要有任意角色或有任意權(quán)限就能通過(guò),否則沒(méi)有權(quán)限。
LbsFilterService的權(quán)限控制策略是,當(dāng)前用戶的位置由每個(gè)過(guò)濾器進(jìn)行權(quán)限控制,得到的結(jié)果集中只要有一個(gè)通過(guò)就可以通過(guò),否則沒(méi)有權(quán)限。位置權(quán)限控制器實(shí)現(xiàn)接口:
基于距離控制的類為L(zhǎng)ocationChecker,控制策略為用戶當(dāng)前位置與資源權(quán)限控制位置之間的實(shí)際距離不大于權(quán)限控制距離就通過(guò);基于區(qū)域控制的類為AreaChecker,控制策略為用戶當(dāng)前位置在權(quán)限控制區(qū)域里就通過(guò)。基于位置的權(quán)限控制中對(duì)位置信息的處理主要用到了百度地圖API的地址解析和逆地址解析等相關(guān)接口。
本文分析了移動(dòng)互聯(lián)網(wǎng)的新特性與Apache Shiro安全框架的優(yōu)良特性,通過(guò)結(jié)合移動(dòng)應(yīng)用RESTful API 和LBS這兩個(gè)特性與Shiro的擴(kuò)展性,合理設(shè)計(jì)了一個(gè)符合RESTful風(fēng)格的權(quán)限控制系統(tǒng)。具有結(jié)構(gòu)清晰、可擴(kuò)展性強(qiáng)、移動(dòng)性強(qiáng)等特性。實(shí)際應(yīng)用表明,該控制系統(tǒng)可以對(duì)控制粒度靈活配置,方便移植到其他移動(dòng)應(yīng)用系統(tǒng)中去。在未來(lái)的發(fā)展中,可繼續(xù)深入擴(kuò)展,整合其他移動(dòng)特性進(jìn)來(lái)。例如手機(jī)聯(lián)系人、網(wǎng)絡(luò)狀態(tài)等,實(shí)現(xiàn)更加豐富的權(quán)限控制功能。
[1]羅軍舟,吳文甲,楊明.移動(dòng)互聯(lián)網(wǎng):終端、網(wǎng)絡(luò)與服務(wù).計(jì)算機(jī)學(xué)報(bào),2011(11):11-34.
[2]Fielding R T.Architectural Styles and the Design of Network-Based Software Architectures[J].University of California Irvine,2000,64 (3):303.
[3]周傲英,楊彬,金澈清,馬強(qiáng).基于位置的服務(wù):架構(gòu)與進(jìn)展.計(jì)算機(jī)學(xué)報(bào),2011(7):1155-1171.
[4]李春雨.基于位置的權(quán)限管理系統(tǒng)研究與實(shí)現(xiàn).上海交通大學(xué),2007.
[5]孟志飛.基于URL訪問(wèn)權(quán)限控制的網(wǎng)絡(luò)安全技術(shù).華東師范大學(xué),2007
[6]徐孝成.基于Shiro的Web應(yīng)用安全框架的設(shè)計(jì)與實(shí)現(xiàn).電腦知識(shí)與技術(shù),2015(16):93-95.
Permission Control;Apache Shiro;RESTful;LBS
Design and Implementation of Mobile Permission Control System Based on Shiro
1007-1423(2016)06-0097-04
10.3969/j.issn.1007-1423.2016.06.023
2015-12-17
2016-01-15
XU Tao
(School of Electronic and Information Engineering,Tongji University,Shanghai 201800)
權(quán)限控制系統(tǒng)是軟件系統(tǒng)中非常關(guān)鍵的一個(gè)系統(tǒng),已經(jīng)有很多成熟的軟件系統(tǒng),但是在移動(dòng)互聯(lián)網(wǎng)的新環(huán)境下有很多新的因素影響著權(quán)限系統(tǒng)。經(jīng)過(guò)對(duì)Apache Shiro、RESTful、移動(dòng)互聯(lián)網(wǎng)等進(jìn)行研究,給出基于Shiro并結(jié)合移動(dòng)互聯(lián)網(wǎng)與RESTful特性的移動(dòng)應(yīng)用權(quán)限控制系統(tǒng),并利用Java語(yǔ)言編程對(duì)該系統(tǒng)進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。
權(quán)限控制;Apache Shrio;RESTful;LBS
許滔(1989~),男,湖南汨羅人,在讀研究生,研究方向?yàn)橐苿?dòng)互聯(lián)網(wǎng)安全
Permission control system is a key part of software system,there are a lot of sophisticated software systems.But under the new environ鄄ment of mobile Internet,many new factors affect the permission system.By researching on the Apache Shiro,RESTful API and Mobile Internet,puts forward a permission system on the basis of Apache Shrio with the features of mobile Internet and RESTful.Gives a design and realization of this system by applying the Java language programming.