宋清卿
摘? 要: 為了在不降低系統(tǒng)性能的前提下,提升前后端分離Web系統(tǒng)內(nèi)訪問控制模塊的開發(fā)效率,介紹了一種以基于角色的訪問控制為核心思想 ,通過解析特定格式的API訪問地址來調(diào)用不同的Spring MVC攔截器以決定控制策略的訪問控制模塊開發(fā)方法。該方法實現(xiàn)了在前后端分離Web系統(tǒng)開發(fā)過程中,業(yè)務邏輯與訪問控制分離,使開發(fā)者在擴展與維護系統(tǒng)訪問控制模塊時能夠通過修改所涉及到功能的API訪問地址使其變得更加輕松與便捷。
關鍵詞: 前后端分離; 基于角色的訪問控制; Spring MVC攔截器; 開發(fā)效率
Abstract: In order to improve the development efficiency of access control module of Web system with frontend-backend separation, without degrading the system performance, this paper introduces an access control module development method which takes Role-Based Access Control (RBAC) as the main part and calls different spring MVC interceptors to determine the control strategy by parsing the API access address in specific format. In the development process of web system with frontend-backend separation, the business logic is separated from the access control, so that the developer can modify the function-related API access address when extending and maintaining the system access control module, make it easier and more convenient.
0 引言
當前Web系統(tǒng)正開始向著多平臺、高性能的方向發(fā)展,伴隨著模塊化和組件化理念的出現(xiàn),前后端分離的開發(fā)模式已成為當下的一種發(fā)展趨勢。傳統(tǒng)模式下開發(fā)的Web系統(tǒng)前后端工作并非獨立[1],可以直接使用Spring AOP來判斷用戶是否擁有某一功能的訪問權限,而前后端分離模式下開發(fā)的Web系統(tǒng)獲取、操作資源完全通過前端向指定API發(fā)送請求來完成,不直接調(diào)用后端中的功能實現(xiàn)代碼[2],所以傳統(tǒng)的訪問控制方法并不適用于前后端分離Web系統(tǒng)。
針對前后端分離的開發(fā)模式,本文提出了一種高代碼復用率、以角色訪問控制為核心思想并包含請求類型判斷的訪問控制方法,以求在不降低系統(tǒng)性能的情況下提升開發(fā)效率,并通過實際系統(tǒng)的開發(fā)實踐證明該訪問控制方法的有效性。
1 基于角色的訪問控制
基于角色的訪問控制(RBAC:Role-Based Access Control)是一種經(jīng)典的權限控制解決方案,其核心思想是將操作、獲取資源的權限分配到相應的角色,每一個用戶擔任一定角色,通過擔任的角色間接獲取到獲取、操作資源的權限[3]。該種解決方案的特點是與用戶相比角色相對穩(wěn)定,可以減輕系統(tǒng)安全管理的負擔并不失靈活性[4]。
本文設計并實現(xiàn)的訪問控制方法采用基于角色的訪問控制方式,即:當用戶發(fā)送請求來獲取、操作資源時,系統(tǒng)先獲取用戶的角色信息,然后通過分析用戶所對應角色的權限來判斷該用戶所是否具有獲取、操作資源的權限,若該用戶所對應的角色具有相應的權限,則繼續(xù)執(zhí)行請求。若該用戶所對應角色不具有相應權限,則駁回請求[5]。
2 訪問控制方法的設計
2.1 總體思路
目前在多數(shù)的Web系統(tǒng)中,用戶具有登錄與未登錄兩種狀態(tài),在登錄與未登錄兩種狀態(tài)下,用戶會對應不同的角色,所以依據(jù)不同的狀態(tài)可以將用戶發(fā)出的請求分為兩種:無需登錄驗證請求、需登錄驗證請求,需登錄驗證請求具體又分為僅需登錄驗證請求與需角色驗證請求。判斷請求類型的方法有多種,如在請求中攜帶參數(shù),或是在業(yè)務邏輯代碼中進行判斷等。本文針對前后端分離Web系統(tǒng)所有前端與后端的交互皆是通過API來完成的特點,設計了一種通過API的訪問路徑來判斷該請求所屬類型的方法。
方法的總體思路是在系統(tǒng)中約定一種可判斷請求類型的API訪問路徑,通過API訪問路徑間接攜帶參數(shù),對只有特定用戶的狀態(tài)或角色才具有訪問權限的API的訪問路徑進行標記,當用戶向API發(fā)送請求時,通過完全獨立于業(yè)務處理代碼之外的Spring MVC攔截器在進入業(yè)務處理流程前判斷該用戶此次請求的API的路徑中有無標記,若該用戶此次請求的API的路徑中有標記則認定此次請求為需權限驗證的請求并進入相應的訪問控制流程進行進一步判斷,若該用戶此次請求的API的路徑中無標記,則認定此次請求為無需權限驗證請求,且不進入相應的訪問控制流程直接處理請求。
其目的是使開發(fā)者在編寫API時僅需專注于業(yè)務邏輯的編寫,而用戶訪問控制模塊的編寫只需要根據(jù)系統(tǒng)的需要配置并實現(xiàn)Spring MVC攔截器后設置API的訪問路徑即可。
2.2 角色權限控制方法設計
考慮到復雜的實際應用環(huán)境,這里將引入權限集的概念來解決在實際開發(fā)過程中,不同角色之間所擁有的權限相互交叉的情況。
權限集是由多個具有某種相同特征的具體操作權限而組成的權限集合。每個角色具有一個或多個權限集的權限,多個角色可共同擁有某一個權限集的權限。通過建立權限集的方法,對角色的權限控制,實現(xiàn)了模塊化控制角色權限的目的。表1為該角色權限控制方法下角色對象所需包含的信息。