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

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

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

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

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

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

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

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

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