前后端分离Web系统下一种访问控制方法的设计与实现

2020-06-04 09:39宋清卿
计算机时代 2020年5期

宋清卿

摘  要: 为了在不降低系统性能的前提下,提升前后端分离Web系统内访问控制模块的开发效率,介绍了一种以基于角色的访问控制为核心思想 ,通过解析特定格式的API访问地址来调用不同的Spring MVC拦截器以决定控制策略的访问控制模块开发方法。该方法实现了在前后端分离Web系统开发过程中,业务逻辑与访问控制分离,使开发者在扩展与维护系统访问控制模块时能够通过修改所涉及到功能的API访问地址使其变得更加轻松与便捷。

关键词: 前后端分离; 基于角色的访问控制; Spring MVC拦截器; 开发效率

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系统正开始向着多平台、高性能的方向发展,伴随着模块化和组件化理念的出现,前后端分离的开发模式已成为当下的一種发展趋势。传统模式下开发的Web系统前后端工作并非独立[1],可以直接使用Spring AOP来判断用户是否拥有某一功能的访问权限,而前后端分离模式下开发的Web系统获取、操作资源完全通过前端向指定API发送请求来完成,不直接调用后端中的功能实现代码[2],所以传统的访问控制方法并不适用于前后端分离Web系统。

针对前后端分离的开发模式,本文提出了一种高代码复用率、以角色访问控制为核心思想并包含请求类型判断的访问控制方法,以求在不降低系统性能的情况下提升开发效率,并通过实际系统的开发实践证明该访问控制方法的有效性。

1 基于角色的访问控制

基于角色的访问控制(RBAC:Role-Based Access Control)是一种经典的权限控制解决方案,其核心思想是将操作、获取资源的权限分配到相应的角色,每一个用户担任一定角色,通过担任的角色间接获取到获取、操作资源的权限[3]。该种解决方案的特点是与用户相比角色相对稳定,可以减轻系统安全管理的负担并不失灵活性[4]。

本文设计并实现的访问控制方法采用基于角色的访问控制方式,即:当用户发送请求来获取、操作资源时,系统先获取用户的角色信息,然后通过分析用户所对应角色的权限来判断该用户所是否具有获取、操作资源的权限,若该用户所对应的角色具有相应的权限,则继续执行请求。若该用户所对应角色不具有相应权限,则驳回请求[5]。

2 访问控制方法的设计

2.1 总体思路

目前在多数的Web系统中,用户具有登录与未登录两种状态,在登录与未登录两种状态下,用户会对应不同的角色,所以依据不同的状态可以将用户发出的请求分为两种:无需登录验证请求、需登录验证请求,需登录验证请求具体又分为仅需登录验证请求与需角色验证请求。判断请求类型的方法有多种,如在请求中携带参数,或是在业务逻辑代码中进行判断等。本文针对前后端分离Web系统所有前端与后端的交互皆是通过API来完成的特点,设计了一种通过API的访问路径来判断该请求所属类型的方法。

方法的总体思路是在系统中约定一种可判断请求类型的API访问路径,通过API访问路径间接携带参数,对只有特定用户的状态或角色才具有访问权限的API的访问路径进行标记,当用户向API发送请求时,通过完全独立于业务处理代码之外的Spring MVC拦截器在进入业务处理流程前判断该用户此次请求的API的路径中有无标记,若该用户此次请求的API的路径中有标记则认定此次请求为需权限验证的请求并进入相应的访问控制流程进行进一步判断,若该用户此次请求的API的路径中无标记,则认定此次请求为无需权限验证请求,且不进入相应的访问控制流程直接处理请求。

其目的是使开发者在编写API时仅需专注于业务逻辑的编写,而用户访问控制模块的编写只需要根据系统的需要配置并实现Spring MVC拦截器后设置API的访问路径即可。

2.2 角色权限控制方法设计

考虑到复杂的实际应用环境,这里将引入权限集的概念来解决在实际开发过程中,不同角色之间所拥有的权限相互交叉的情况。

权限集是由多个具有某种相同特征的具体操作权限而组成的权限集合。每个角色具有一个或多个权限集的权限,多个角色可共同拥有某一个权限集的权限。通过建立权限集的方法,对角色的权限控制,实现了模块化控制角色权限的目的。表1为该角色权限控制方法下角色对象所需包含的信息。