杨英樱,乔运华,班玉荣
(北京机械工业自动化研究所有限公司,北京 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系统管理将各个模块分割成小型的独立功能,每个微服务按照自己的流程运行,开发团队只要部署自己的应用即可,减缓了部署的时间;易于开发和维护,对于开发人员来说,他们可以用更高的质量水平更快地开发独立的功能,这样提高了团队开发的效率;并且可扩展性更强,增加了一些具有独立功能的底层应用的可重用性。微服务是未来的趋势。