◆應(yīng)劍 董矅榕 黃騰飛
一種高效可靠的安全管理機(jī)制的實(shí)現(xiàn)方法
◆應(yīng)劍 董矅榕 黃騰飛
(南京工業(yè)職業(yè)技術(shù)大學(xué)計(jì)算機(jī)與軟件學(xué)院 江蘇 210046)
為進(jìn)一步提高網(wǎng)絡(luò)資源安全管理機(jī)制的穩(wěn)定性,解決當(dāng)下安全管理機(jī)制性能差、不穩(wěn)定以及操作復(fù)雜的弊端,本文介紹了一種高效可靠的安全管理機(jī)制的實(shí)現(xiàn)方法。以SpringBoot為載體,由Shiro提供認(rèn)證鑒權(quán)核心算法。這種方法充分體現(xiàn)了Shiro操作簡便、獨(dú)立運(yùn)行和JWT高性能、高可靠性的特點(diǎn),使開發(fā)者能夠更快更簡單地搭建高效穩(wěn)定的安全管理機(jī)制。
安全管理機(jī)制;權(quán)限管理;Shiro;JWT
當(dāng)前,信息化時(shí)代發(fā)展迅速,個(gè)人信息和數(shù)據(jù)資源的安全問題已成為備受關(guān)注的話題,根據(jù)《數(shù)據(jù)泄露水平指數(shù)調(diào)查報(bào)告》,僅2017年,全球被泄露數(shù)據(jù)就達(dá)26億條,導(dǎo)致這種現(xiàn)象發(fā)生的原因是當(dāng)下存在的單方面安全管理機(jī)制存在著穩(wěn)定性差、性能弱以及操作復(fù)雜的弊端,因此保護(hù)數(shù)據(jù)安全可靠已成為亟須解決的問題。
本文主要討論一種高效可靠的安全管理機(jī)制的實(shí)現(xiàn)方法,旨在規(guī)避主流安全管理機(jī)制弊端,提高安全管理機(jī)制的穩(wěn)定性和可靠性。
SpringBoot是一套基于Spring的微服務(wù)框架。它可獨(dú)立運(yùn)行Spring項(xiàng)目,且無需xml即可實(shí)現(xiàn)所有配置,擁有配置簡單,內(nèi)嵌服務(wù)器、指標(biāo)、健康檢測、外部優(yōu)化等功能,同時(shí)可根據(jù)類路徑中的類注解進(jìn)行Bean實(shí)例的自動(dòng)化裝配,使項(xiàng)目開發(fā)、配置以及部署更為簡單方便。
Shiro是一個(gè)功能強(qiáng)大且易于使用的Java安全框架,可用于執(zhí)行身份驗(yàn)證、授權(quán)、加密以及會(huì)話管理,并且Shiro具備一系列完整的API,便于開發(fā)人員使用。Shiro中自帶Session生成和解析功能,通過提供的Session可在相應(yīng)應(yīng)用中進(jìn)行會(huì)話創(chuàng)建,并且和容器的使用互不影響,Shiro可以在沒有Web容器的情況進(jìn)行Session的生成和解析,對不同的會(huì)話可做不同的反應(yīng)。Shiro架構(gòu)主要分為Subject、SecurityManager、Realm三方面。
(1)Subject
Subject可理解為用戶主體,用戶主體不代表是具體用戶,可以和當(dāng)前應(yīng)用進(jìn)行交互的東西均稱為用戶主體,由SecurityManager統(tǒng)一管理Subject。
(2)SecurityManager
Shiro內(nèi)部通過集成Authenticator(認(rèn)證器)、Authrizer(授權(quán)器)、SessionManager(Session管理器)、SessionDAO(Session持久化)、CacheManager(緩存控制器)完成用戶的認(rèn)證、授權(quán)、會(huì)話管理、緩存管理。SecurityManager作為Shiro的安全管理器,有關(guān)安全的操作都將經(jīng)由它進(jìn)行交互,同時(shí)它也是Shiro的核心,控制著Shiro的上述組件來完成用戶一系列功能的實(shí)現(xiàn)。
(3)Realm
Realm作為用戶的信息認(rèn)證器和權(quán)限認(rèn)證器,可用于獲取用戶信息數(shù)據(jù),例如角色、權(quán)限等信息,SecurityManager若要驗(yàn)證用戶身份,則必須從Realm中獲取到相應(yīng)用戶數(shù)據(jù)以進(jìn)行比較,確定用戶身份是否合法,同時(shí),也需從Realm中獲取用戶所對應(yīng)的角色和權(quán)限來驗(yàn)證用戶是否具備操作資格。
JWT是一種用于雙方之間傳遞信息的表述性聲明規(guī)范。它定義了一種自包含的方法用于雙方交互,以JSON對象的形式來安全地傳遞信息,負(fù)載中包含了所有用戶所提前設(shè)定好的信息,從而避免重復(fù)地操作數(shù)據(jù)庫。可以通過URL、POST參數(shù)或者HTTP Header來進(jìn)行傳遞,并且具備傳輸速度快的優(yōu)點(diǎn)。
為提高性能、簡化開發(fā),本方法所采用的是B/S架構(gòu)模式,通過B/S架構(gòu)模式,可快速進(jìn)行應(yīng)用搭建,更直觀地表現(xiàn)本方法的設(shè)計(jì)與實(shí)現(xiàn)。B/S架構(gòu)由于使用瀏覽器作為客戶端而優(yōu)于C/S架構(gòu),B/S架構(gòu)模式如圖1所示。
圖1 B/S架構(gòu)模式圖
本方法核心代碼使用面向?qū)ο蟮腏ava語言開發(fā)實(shí)現(xiàn),使用postman和瀏覽器來進(jìn)行程序測試,數(shù)據(jù)存儲(chǔ)使用MySQL數(shù)據(jù)庫。
(1)用戶申請對服務(wù)端認(rèn)證/鑒權(quán)接口進(jìn)行有/無狀態(tài)訪問;
(2)用戶訪問認(rèn)證/鑒權(quán)接口受限,跳轉(zhuǎn)至設(shè)定接口。
為更好地進(jìn)行權(quán)限管理,本方法在數(shù)據(jù)庫設(shè)計(jì)方面使用了基于用戶角色的訪問控制方法,通過將權(quán)限定義于角色,由角色控制用戶權(quán)限的方法來實(shí)現(xiàn)用戶所屬角色定義。表1為用戶表所需包含信息。
表1 用戶角色權(quán)限信息表
字段名類型長度描述 pk_idint12惟一標(biāo)識(shí) namevarchar64姓名 passwordvarchar64密碼 rolevarchar64角色 permsvarchar255權(quán)限 saltvarchar255加密鹽
重寫Shiro基于HTTP的身份驗(yàn)證攔截器,實(shí)現(xiàn)攔截器的自定義,通過onPreHandle()、isAccessAllowed()一系列方法來初步實(shí)現(xiàn)用戶登錄認(rèn)證和權(quán)限鑒定,定義邏輯方法來確保攔截器的高效穩(wěn)定。
通過配置Shiro攔截器,在用戶訪問資源之前進(jìn)行初步的登錄認(rèn)證、權(quán)限鑒定,避免資源浪費(fèi)。重寫onPreHandle()方法,根據(jù)Token以及Session判斷是否處于有效登錄狀態(tài)。重寫isAccessAllowed()方法,判斷用戶是否具備角色權(quán)限進(jìn)行資源訪問(本方法暫不在攔截器內(nèi)進(jìn)行權(quán)限鑒定)。根據(jù)攔截器的攔截結(jié)果,通過邏輯判斷來實(shí)現(xiàn)攔截器處理。關(guān)鍵代碼如下:
ShiroConfig是Shiro的核心配置類,通過Realm、SecurityManager、ShiroFilterBean的Bean實(shí)例嵌套調(diào)用搭建配置類結(jié)構(gòu),其核心是在ShiroFilterBean中使用鍵值對形式來配置攔截路徑以及攔截形式,同時(shí)將之前初始化的攔截器進(jìn)行配置。關(guān)鍵代碼如下:
JWT框架顯著增強(qiáng)了Token的靈活性,通過配置,Token內(nèi)可用于存儲(chǔ)用戶所需的所有信息,避免重復(fù)性操作數(shù)據(jù)。Token配置完成后,需在Shiro框架中進(jìn)行引入,覆蓋原生Token。關(guān)鍵代碼如下:
(1)身份認(rèn)證
通過重寫doGetAuthenticationInfo()方法獲取用戶Token,解析Token為用戶數(shù)據(jù),通過數(shù)據(jù)比對判斷用戶認(rèn)證成功與否,若成功則進(jìn)一步調(diào)用SimpleAuthenticationInfo()方法完成用戶認(rèn)證,若失敗則拋出異常。關(guān)鍵代碼如下:
(2)權(quán)限鑒定
通過重寫doGetAuthorizationInfo()方法獲取當(dāng)前Subejct,進(jìn)而得到Token,解析用戶數(shù)據(jù),生成SimpleAuthorizationInfo用戶角色列表,交由Shiro進(jìn)一步進(jìn)行權(quán)限鑒定。關(guān)鍵代碼如下:
(3)系統(tǒng)性能測試
為進(jìn)一步驗(yàn)證本方法高效穩(wěn)定且適于推廣,在同等硬件設(shè)施及同等功能模塊的基礎(chǔ)上,與當(dāng)下熱門安全管理機(jī)制Spring Security進(jìn)行性能測試對比,通過100次API性能測試,得出平均性能指數(shù)(響應(yīng)耗時(shí)總時(shí)間/總次數(shù))如表2所示。
表2 性能指數(shù)對比結(jié)果
測試項(xiàng)目Spring Security本方法 無狀態(tài)無權(quán)限訪問開放接口7.79ms7.65ms 無狀態(tài)無權(quán)限訪問鑒權(quán)接口9.06ms8.85ms 有狀態(tài)無權(quán)限訪問鑒權(quán)接口14.15ms12.775ms 有狀態(tài)有權(quán)限訪問鑒權(quán)接口7.85ms6.75ms
本方法設(shè)計(jì)實(shí)現(xiàn)了一種高效可靠的安全管理機(jī)制的實(shí)現(xiàn)方法,實(shí)現(xiàn)了安全訪問控制、用戶身份認(rèn)證、用戶權(quán)限鑒定等功能,在提升數(shù)據(jù)安全可靠性的前提下,進(jìn)一步提高了權(quán)限管理的效率和質(zhì)量,最終為保障基于本方法實(shí)現(xiàn)的管理信息系統(tǒng)的安全、高效、穩(wěn)定提供了支持。
[1]王杉文.基于SpringBoot+Shiro的權(quán)限管理實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2019(9):160-161,173.
[2]楊運(yùn)平,吳智俊.Apache Shiro安全框架在技術(shù)轉(zhuǎn)移服務(wù)系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2014(3):158-160.
[3]司婷婷,郭文靜.互聯(lián)網(wǎng)下銀行客戶信息及資金安全保障——基于SpringMVC集成Shiro框架維護(hù)信息安全[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2019(10):114-116.
[4]楊洪濤,李昱,陳超,等.Shiro框架配合安全策略在Web系統(tǒng)中的應(yīng)用[J].IT經(jīng)理世界,2019,22(3):68-69,83.
[5]陳宇收,饒宏博,徐亮.基于Shiro的權(quán)限管理機(jī)制研究[J].電腦編程技巧與維護(hù),2019(6):39-40.
[6]方釗,周青欽,饒似玉.基于Web的高校學(xué)生信息管理系統(tǒng)的設(shè)計(jì)[J].價(jià)值工程,2020,39(25):247-248.
[7]劉全飛,周相兵.基于Apache Shiro的站群角色管理[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015(6):177-182.
[8]陳波,劉星,蘭全祥.基于Shiro框架的政協(xié)提案系統(tǒng)安全性研究與設(shè)計(jì)[J].西昌學(xué)院學(xué)報(bào)(自然科學(xué)版),2018,32(3):94-97.
[9]易文康,程驊,程耕國.Shiro框架在Web系統(tǒng)安全性上的改進(jìn)與應(yīng)用[J].計(jì)算機(jī)工程,2018,44(11):135-139.
[10]劉志濤,周淦.基于Shiro架構(gòu)的通配符的權(quán)限設(shè)計(jì)思路[J].信息技術(shù)與網(wǎng)絡(luò)安全,2019,38(2):29-32.
[11]宋成明.基于Shiro的某高??蒲行畔⒐芾硐到y(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].智能計(jì)算機(jī)與應(yīng)用,2017,7(4):62-63,66.
[12]加爾肯·胡孜哈依爾.基于Shiro框架的授權(quán)機(jī)制設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)導(dǎo)報(bào),2015(8):213-213.
[13]許滔.基于Shiro的移動(dòng)應(yīng)用權(quán)限控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2016(6):97-100.
[14]榮艷冬,馮建平.深入探索Shiro權(quán)限框架的體系結(jié)構(gòu)和實(shí)際應(yīng)用[J].電腦知識(shí)與技術(shù),2015,11(22):67-68.
[15]徐孝成.基于Shiro的Web應(yīng)用安全框架的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2015(16):93-95.
[16]楊運(yùn)平,吳智俊.Apache Shiro安全框架在技術(shù)轉(zhuǎn)移服務(wù)系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2014(3):158-160.
[17]程小恩,施濟(jì)瑜.基于Apache Shiro框架的通用權(quán)限設(shè)計(jì)與實(shí)現(xiàn)[J].企業(yè)技術(shù)開發(fā)(下半月),2013,32(16):17-18.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2022年4期