榮艷冬 馮建平
摘要:權限管理系統(tǒng)是現(xiàn)代軟件項目中必不可少的子系統(tǒng),用戶通常要求權限管理系統(tǒng)是細粒度和松耦合,盡量減少在權限系統(tǒng)開發(fā)中花費更多的精力。Java項目中通常會將重復使用的技術封裝為框架,然后將框架掛接到實際項目中,從而大幅度提高項目制作效率和代碼質量。該文主要討論Shiro框架在企業(yè)中的應用,文章主要從Shiro的體系結構、構建和具體應用三個方面進行了詳細的闡述,通過對比闡明了Shiro框架在技術和使用等方面的優(yōu)勢。
關鍵詞:權限;JavaEE;框架;Shiro
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)22-0067-02
權限管理是指根據(jù)系統(tǒng)設置的安全規(guī)則或者安全策略,用戶可以訪問而且只能訪問自己被授權的資源。在軟件項目中,幾乎所有的系統(tǒng)都需要權限管理系統(tǒng)。但是權限管理系統(tǒng)的設計是一件非常復雜的事情,它需要遵從這樣幾條原則:一是必須保障系統(tǒng)使用的安全,能夠覆蓋系統(tǒng)所有功能,所以通常要求權限管理系統(tǒng)是細粒度的;二是能夠方便快捷的進行系統(tǒng)權限的分配,不受到用戶數(shù)量和用戶使用功能的限制,其中最長采用的是基于角色的訪問控制模型(RBAC);三是權限系統(tǒng)和業(yè)務相分離,無論從代碼層面,還是應用層面,權限系統(tǒng)的開發(fā)和使用不受到業(yè)務的限制。
1 Java項目權限框架概述
Java項目中除了自己開發(fā)權限框架外,經(jīng)常會使用一些開源的權限框架,或者是在這些開源的框架上進行二次開發(fā),使用權限框架可以大大簡化權限系統(tǒng)的開發(fā),能夠滿足大多數(shù)企業(yè)項目復雜的需求。常見的框架技術有Spring Security、AcegiSecurity、Kasai、ralasafe和Shiro等,每種框架都具有自己的特點,也存在不能進行細粒度控制、功能簡單、無法滿足用戶的需求和易用性差等缺點。
Shiro是眾多框架中表現(xiàn)相對較好的一個,它是由Apache公司的開發(fā)的Java權限框架,它是基于RBAC的細粒度框架,從依賴關系來講,它不依賴任何框架技術,可以獨立被使用,也可以和其他框架結合使用;從應用范圍來講,它既可以被應用到Web開發(fā),也可以被應用到客戶端開發(fā);從具體應用來講,它的配置非常簡單,易用性很強,本文重點討論如何使用Shiro構建權限管理系統(tǒng)。
2 使用Shiro構建權限系統(tǒng)
2.1 Shiro框架的體系結構
1)認證(Authentication),它的功能是判斷用戶身份是否合法,通俗來講是登錄功能,這是權限系統(tǒng)最為基礎的功能,Shiro允許用戶對認證方法重寫,從而根據(jù)項目的業(yè)務需求實現(xiàn)認證。
2)授權(Authorization),這部分功能是權限系統(tǒng)的核心功能,Shiro是基于RBAC模型進行授權,它最基礎的內(nèi)容是權限點,這也是細粒度控制的體現(xiàn)。通過授權,Shiro框架將預先定義好的權限點和角色分配給用戶,用戶在認證通過后,Shiro框架會約束用戶對于系統(tǒng)訪問的權限。
3)會話管理(Session Management),Web項目中通常具備會話管理功能,例如:Java Web中通常使用HttpSession類進行會話管理,Shiro框架構建了專門的會話管理機制,Web項目中的會話可以由它代為管理,即使不具備會話管理功能的客戶端項目,Shiro的會話管理功能也可以使用,這使得Shiro用戶在會話管理層面無需關心是何種類型的項目,這也是Shiro框架易用性的重要體現(xiàn)。
4)加密(Cryptography),權限系統(tǒng)中數(shù)據(jù)加密是必不可少的內(nèi)容,Shiro試圖簡化加密和解密操作,它引入了CipherService API,讓用戶只需提供密鑰就可以根據(jù)需要進行加密和解密。此外,Shiro封裝了諸如md5和sha等常用的加密算法,方便用戶進行調(diào)用。
5)其他功能,除了核心功能外,Shiro還提供了幾項非常實用的特征,包括Web支持、緩存功能、多線程并發(fā)驗證、測試工具等。
2.2 構建權限框架
Shiro框架是RBAC模型,而且是細粒度權限管理,其構建的基礎是權限點,角色和用戶等權限數(shù)據(jù)都是基于權限點進行建立。用戶可以通過重寫AuthorizingRealm類和修改配置文件實現(xiàn)Shiro框架服務于業(yè)務系統(tǒng),以下是具體構建的流程:
1)定義權限數(shù)據(jù)
權限數(shù)據(jù)通常與被存儲在數(shù)據(jù)庫中,也可以用其他的形式存儲。在具體建立時通常需要構建權限點數(shù)據(jù)、角色數(shù)據(jù)和用戶數(shù)據(jù),權限點數(shù)據(jù)和角色數(shù)據(jù)是多對多關系,角色數(shù)據(jù)和用戶數(shù)據(jù)也是多對多關系,權限點數(shù)據(jù)最為核心的內(nèi)容是權限字符串,通常形式是“fjqx:zjqx”,冒號前代表父級權限,后面是子集權限,無論是在頁面還是在程序代碼中,都是通過這個串標識系統(tǒng)功能,這個串對應的權限點被賦予了哪個用戶,哪個用戶才擁有訪問這個系統(tǒng)功能的權限。
2)配置Shiro過濾器
以Web開發(fā)為例,Shiro權限框架的基礎是過濾器,過濾器根據(jù)認證和授權的設定,決定用戶訪問系統(tǒng)的權限,Shiro提供IniShiroFilter類完成這項工作。由于Shiro提供了對于Spring和Struts等框架的支持,所以針對于不同類型的框架,過濾器配置有一定的差異。
3)繼承AuthorizingRealm類
繼承AuthroizedingRealm類,重寫“doGetAuthorizationInfo”和“doGetAuthenticationInfo”方法是Shiro開發(fā)的核心,通過對這兩個方法的重寫,用戶可以根據(jù)自己業(yè)務的實際情況編寫認證和授權功能。例如:用戶數(shù)據(jù)和授權數(shù)據(jù)如果存儲在數(shù)據(jù)庫中,這兩個方法中就可以讀取數(shù)據(jù)庫,完成認證和授權的編寫。
4)URL配置
URL配置可以設定系統(tǒng)URL認證路由情況和訪問權限,通過配置“l(fā)oginURL”、“successURL”、“unauthorizedUrl”等參數(shù)決定系統(tǒng)認證入口、認證成功和認證失敗的URL流向。通過給系統(tǒng)URL設定”authc”、“anon”、“l(fā)ogout”等值,確定哪些URL需要認證才可以訪問,哪些路徑可以匿名訪問,哪些路徑是注銷鏈接。
2.3 Shiro的實際應用
1)用戶認證
用戶認證和傳統(tǒng)的用戶登錄有一定的差別,首先需要利用Shiro提供的UsernamePasswordToken類和輸入的用戶名驗證信息構建認證令牌,然后使用Subject類的login方法進行令牌的驗證,從而判定登錄是否成功。
2)授權的應用
授權的應用主要體現(xiàn)在三個方面:一是URL控制;二是頁面級元素的控制;三是代碼級權限控制。URL通過配置文件決定訪問的方式和權限,頁面級元素和代碼級權限控制主要通過權限字符串,在Web開發(fā),可以通過標簽的方式在頁面中進行HTML元素的控制,代碼級權限可以通過isPermitted(權限字符串)、isRole(角色字符串)等方法進行權限控制。
3 結束語
Shiro權限框架是開源的,它提供了簡潔和實用的權限管理功能,它在用戶界面、訪問路徑和代碼層面都提供了訪問控制,能夠做到真正安全的訪問控制。Shiro所有的技術都是圍繞認證和授權這兩個核心,根據(jù)系統(tǒng)的需要可以重寫認證和授權,這提供給用戶更加靈活的權限管理。但是,項目的需求通常會非常復雜,Shiro在具體應用的時候還需要根據(jù)項目的實際需求對Shiro源代碼進行相應的調(diào)整,再結合Shiro的特點完成具體任務。
參考文獻:
[1] 黃經(jīng)贏.基于Shiro框架的細粒度權限控制系統(tǒng)的設計與實現(xiàn)[J].廣東技術師范學院學報:自然科學,2013(7):20-23.
[2] 楊運平, 吳智俊.Apache Shiro安全框架在技術轉移服務系統(tǒng)中的應用[J].計算機與現(xiàn)代化,2014(3):157-160.
[3] 梁云娟.使用SpringSecurity開發(fā)安全的Java程序[J].河南師范大學學報:自然科學版,2012,4(40):148-150.