楊英櫻,喬運華,班玉榮
(北京機械工業(yè)自動化研究所有限公司,北京 100120)
RS10系統(tǒng)管理子系統(tǒng)是整個RS10系統(tǒng)正常運行的基礎,可以選擇不同的操作系統(tǒng)和數(shù)據(jù)庫,可以設置個性化菜單,可以為其他子系統(tǒng)提供權限理,是系統(tǒng)管理員的好助手,是RS10系統(tǒng)的入口,更是RS10系統(tǒng)不可或缺的一部分。
之前的RS10版本存在以下問題:
采用客戶端發(fā)送請求的方式存在很多弊端,比如JSP只能在支持java的管web服務器中運行,無法使用nginx提升并發(fā)性能、服務器收到的請求太多,壓力太大,頁面響應慢、前后端不分離,修改時需要雙方協(xié)同開發(fā),效率低下。
系統(tǒng)管理子系統(tǒng)在配置頁面以及修改頁面時,每個需要做授權的頁面、驗證的頁面、權限校驗的頁面等邏輯相同的頁面都需要寫同樣的過濾程序,同樣的驗證程序,代碼重復率高,代碼復用度低,不符合面向切面編程(AOP)的思想。
基于上述問題我們采用了spring boot微服務架構和面向切面編程的思想,即把相同的業(yè)務邏輯抽象成模塊。通過采取這樣的方式,我們達成了以下效果:
1)瀏覽器發(fā)送請求后直達HTML頁面,通過ajax調用服務端口產(chǎn)生數(shù)據(jù),實現(xiàn)前后端真正的解耦,前后端分離;
2)在大并發(fā)情況下,我可以同時水平擴展前后端服務器,可以將除了接口以外的其他所有http請求全部轉移到前端nginx上。
3)把授權、驗證等相關業(yè)務抽象出來作為模型化可以實現(xiàn)代碼復用,提升效率,在需要用到權限校驗的地方、數(shù)據(jù)驗證的地方調用模型的公用方法處理即可。
4)模型是可配置的,可以動態(tài)調整權限校驗邏輯一處修改處處生效,極大的提高了效率。
本系統(tǒng)管理以SpringBoot作為主要核心框架,以ExtJs作為UI框架,基于B/S結構上支持多種數(shù)據(jù)庫,以MyBatis作為數(shù)據(jù)持久層框架,用Log4j來記錄日志,以Maven進行項目管理框架的開發(fā)。
Spring框架是 一種開源應用框架。它的核心主要為:控制反轉(IOC)和面向切面(AOP)這兩個概念。
IoC是提供具有控制反轉特性的容器,它可以解決創(chuàng)建了許多重復對象,造成大量資源浪費;更換實現(xiàn)類需要改動多個地方;創(chuàng)建和配置組件工作繁雜,給組件調用方帶來極大不便等問題
AOP就是面向橫向切面的編程。它可以解決切面邏輯編寫繁瑣,有多少個業(yè)務方法就需要編寫多少次的問題。
Spring Boot是發(fā)展在Spring的基礎上,操作上更加簡便,因為它可以根據(jù)jar包和類自動配置Bean,極大的簡化了應用程序初始搭建和開發(fā)過程。配置文件少了、節(jié)約了大量的開發(fā)時間并提高了生產(chǎn)力。對整個團隊的開發(fā)及維護來說,避免了編寫XML配置和注釋等。
不僅如此,Spring Boot內嵌了servlet容器,從而降低了對環(huán)境的要求,只需執(zhí)行java-jar xx.jar命令就可以獨立運行Spring Boot項目,并且還可以對其進行監(jiān)控。
ExtJS是一款功能非常強大的用來開發(fā)前端界面的的JS框架。它具備一套完整的組件庫、支持多種強大功能,主要用于創(chuàng)建前端用戶界面,是瀏覽器里的桌面級UI庫。開發(fā)者可以通過ExtJS提供的強大組件迅速的開發(fā)出強大美觀的軟件界面。
系統(tǒng)管理模塊提供業(yè)務系統(tǒng)功能管理,使系統(tǒng)管理員可以為系統(tǒng)賬號配置功能權限及菜單權限,是平臺運行的基礎。系統(tǒng)功能模塊圖如圖1所示:

圖1
但是其中的模塊管理存在很多的重復性邏輯代碼,在多個邏輯過程中有重復的操作行為,比如授權賬號時每個需要做權限校驗的頁面都需要寫同樣的權限過濾程序和同樣的權限驗證程序代碼,很繁瑣。所以我們基于面向切面編程的編程思想,針對業(yè)務處理過程中的切面進行模型化,之后調用模型的公用方法進行處理,以獲得邏輯過程中各部分之間低耦合性的隔離效果。
通用服務平臺支持業(yè)務留痕模型、流程驅動模型、業(yè)務授權模型、數(shù)據(jù)和理性校驗模型、業(yè)務數(shù)據(jù)結轉模型支持、消息推送模型支持、第三方數(shù)據(jù)交互模型、算法庫模型。
每一種模型都需要先定義通用對象類型,比如業(yè)務授權模型中,首先需要定義通用授權對象類型,供功能授權和業(yè)務授權模型選擇使用。內置數(shù)據(jù)包括賬號授權、角色授權、組織授權、崗位授權。通過業(yè)務授權模型定義來進行開發(fā)業(yè)務授權,調用通用授權方法,完成授權;業(yè)務權限校驗時,可以調用通用權限查詢方法,獲取查詢結果。查詢時,通用查詢模型需要封裝成動態(tài)查詢條件,匹配該條件加上頁面?zhèn)鬟f的篩選條件得到查詢條件,封裝通用查詢頁面,關聯(lián)查詢的方法。
通用服務平臺詳細功能如圖2所示。

圖2
2.1.1 授權模型
授權模型是用來進行頁面中用戶、角色、菜單直接的權限配置的。
首先給做授權業(yè)務的頁面定義一個授權頁面號,用于唯一標識一個模型。然后根據(jù)數(shù)據(jù)字典建立授權結果表,根據(jù)實際業(yè)務場景定義授權模型。授權結果表中的的業(yè)務字段與模型明細中的業(yè)務字段要一一對應。授權模型定義完成后生成針對授權表的新增、修改、刪除方法,各個業(yè)務字段的望遠鏡,針對于業(yè)務原表的檢索方法。根據(jù)授權頁面號從授權模型頭表中查詢到唯一記錄,獲取該授權頁面對應的授權結果表名和需要修改的權限記錄的所有字段名及對應值,從授權模型配置表中查找當前系統(tǒng)中該授權頁面對應模型所使用的授權對象類型。通用方法自動獲取當前頁面的表單信息對應到授權結果表的各個字段,執(zhí)行數(shù)據(jù)保存操作寫入授權結果表。要求結果表的字段與頁面的各個字段保持一致。
如果是賬號授權,則根據(jù)授權頁面號查詢到唯一記錄,再從授權結果表中,查詢授權對象類型為賬號授權的,權限信息如果是其他授權,則需要先從授權對象類型表中查找該授權對象類型對應的關聯(lián)表名,再從關聯(lián)表查詢當前賬號對應的授權對象類型,最后從授權結果表中查詢授權對象類型對應的所有權限信息
2.1.2 授權模型流程圖
如圖3所示。

圖3 授權模型流程圖
2.1.3 驗證模型
驗證模型是可以進行數(shù)據(jù)驗證并對異常進行合理反饋的。
首先需要對驗證模型進行定義,針對一個功能的保存或確認等操作,可以創(chuàng)建一個用于驗證數(shù)據(jù)合理性的后臺驗證模型,每一個驗證項可作為驗證模型的明細;可實現(xiàn)選擇存放模型庫、模型另存為。
根據(jù)前臺傳入的驗證參數(shù),在和事物開啟后提交前,分別進行預先驗證和結果驗證,按順序號規(guī)則循環(huán)處理各驗證項的驗證。首先封裝驗證項驗證數(shù)據(jù),然后根據(jù)匹配條件取數(shù)據(jù)庫中的驗證項驗證數(shù)據(jù),最后根據(jù)控制規(guī)則進行數(shù)據(jù)驗證判定。當中的異常數(shù)據(jù)進行后臺異常處理。
2.1.3 模型驗證流程圖
如圖4所示。

圖4 模型驗證流程圖
2.2.1 系統(tǒng)參數(shù)設置
系統(tǒng)參數(shù)設置主要是設置系統(tǒng)的基本運行參數(shù),包括登錄方式的管理、文件類型的限制、是否開啟密碼驗證、是否開啟三員管理、是否開啟日志記錄等。日志記錄包含了用戶日志管理、程序訪問日日志管理、權限日志管理和清理日志的功能。除此之外,還需要定義通用望遠鏡模板和管理維護平臺中的所有子系統(tǒng)。
2.2.2 菜單管理設計
菜單管理使得用戶可以DIY屬于自己的菜單,可以選擇自己想要的功能,整個系統(tǒng)更加的靈活,用戶可以根據(jù)個人偏好實現(xiàn)定制的菜單。菜單管理詳細功能如圖5所示:

圖5
2.2.3 角色管理設計
角色信息查詢可以查詢平臺中的所有角色信息。角色用戶授權用來完成角色和用戶的綁定關系,角色管理詳細功能如圖6所示。

圖6
2.2.4 用戶管理設計
用戶信息維護可完善賬號的基本信息和賬號關聯(lián)信息,通過用戶類型管理可以管理并維護所有賬號類型。用戶通過用戶角色授權完成用戶和角色的綁定。用戶管理詳細功能如圖7所示。

圖7
2.2.5 權限管理設計
權限管理具有角色菜單權限管理、崗位菜單權限管理和反向授權、用戶菜單權限管理的功能。權限管理主要用來實現(xiàn)角色與菜單權限綁定和用戶與菜單權限的綁定。其中,角色和賬號的分配可以維護平臺賬號和角色的關聯(lián)信息,菜單授權可以實現(xiàn)平臺賬號與菜單權限的關聯(lián)信息,實現(xiàn)授權功能。按賬號類型分組,對賬號分配角色,一個賬號可以分配多個角色。權限管理詳細功能如圖8所示。

圖8
采用微服務架構的RS10系統(tǒng)管理將各個模塊分割成小型的獨立功能,每個微服務按照自己的流程運行,開發(fā)團隊只要部署自己的應用即可,減緩了部署的時間;易于開發(fā)和維護,對于開發(fā)人員來說,他們可以用更高的質量水平更快地開發(fā)獨立的功能,這樣提高了團隊開發(fā)的效率;并且可擴展性更強,增加了一些具有獨立功能的底層應用的可重用性。微服務是未來的趨勢。