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