APP下载

浅谈前后端分离技术在权限管理系统中的应用

2021-03-04卢彦晓

电脑知识与技术 2021年34期

卢彦晓

摘要:在各种基于Web技术的应用系统中,基于系统安全性的需求,都需要对用户在系统中的权限进行管理,随着Web前后端开发技术的发展与应用,基于前后端分离的架构得到了深入和广泛的应用,逐渐成为Web开发的标准。该文在对前端框架Vue.js、后端SpringBoot框架、Apache Shiro安全框架技术进行分析的基础之上,基于RBAC的权限设计理念,对前后端分离在权限管理系统中的应用进行分析,为权限管理系统的设计提供了一个思路。

关键词:前后端分离架构;Vue.js;权限管理系统;基于角色的访问控制;Apache Shiro安全框架

中图分类号:TP391      文献标识码:A

文章编号:1009-3044(2021)34-0068-02

随着互联网技术的飞速发展和应用的深入,B/S开发模式在基于Web的应用中逐渐成为主流的开发模式。虽然B/S开发模式得到了广泛的应用,但它也存在着诸多的缺点,例如前后端代码的耦合度高,网站流量较大时,服务器的压力较大,以及网站响应速度慢等。

另一方面,随着互联网应用的深入,网站流量的增加,业务需求的改变,项目势必需要进行升级扩展和结构优化。但传统的开发模式,虽然引入了MVC思想,使代码得到了一定的解耦合,但仍然有大量的前后端代码耦合在一起,需要开发人员必须同时学习前后端技术,给开发人员带来了极大的学习压力和成本,同时造成代码的可读性和可维护性较差,给后期项目的扩展和维护增加了难度。

因此,伴随着前端技术的发展,在Web开发中引入前后端分离的开发模式是必然的趋势,前端与后端分离后,不仅降低了前端开发人员学习新知识的成本,同时提高了开发的效率,缩短了项目开发周期,提高了项目的可维护和可扩展性。

1 前后端分离技术概述

传统的Web开发,开发人员不仅要负责后端,还要负责前端,开发人员不能同时进行,项目开发的效率较低。而在前后端分离的开发模式中,开发人员各司其职,前端开发人员只需要关注于前端页面的呈现、样式、行为,通过调用后端的API实现数据的渲染;后端人员则只需要关注于数据访问和业务逻辑,根据项目前端需求提供相应的API接口供前端调用即可。前后端分离实现了Web开发的高度解耦,开发人员分工明确、职责分明,前后端只通过API进行交互。

1.1 前端Vue.js

Vue.js是目前应用较多的前端开发框架,它被设计为自底向上逐层应用,是一套用于快速构建前端用户界面的渐进式框架,它只关注视图层,并且易于学习。它将整个页面的内容分解为若干个组件,每一个组件都有自己的JavaScript代码和CSS样式,利用组件来构建页面内容,同时,组件还可以实现复用。另一方面,Vue.js提供了强大的前端路由功能,利用其路由守卫的功能,在前端进行路由跳转的时候,对路由进行一系列的逻辑判断,实现对页面组件权限的控制功能。

1.2 后端SpringBoot开发框架

在Web开中,Spring的出现解决了传统EJB开发繁重的问题,为基于Java的Web开发提供了一套简单实用的解决方案。但伴随着互联网应用的深入,系统的功能越来越多,其复杂度也越来越高,在Spring中,大量的XML配置,以及与第三方框架的整合问题,给系统开发者带来了极大的痛苦。因此,SpringBoot框架应运而生了,其设计的目的就是用来简化Spring应用的初始化搭建以及开发过程,它采用了特定的方式进行配置,大大减少了项目中的XML配置,使开发人员可以通过少量的注解即可实现项目的自动化配置,以及导入相关的依赖,即可实现与第三方框架进行整合,极大地提高了系统开发的效率。

1.3 Apache Shiro安全框架

在早期的Web应用中,安全性與权限主要通过HttpSessions与数据加密来实现,但这样的方式,应用时非常麻烦,因此,应运而生了Apache Shiro框架。它是一个简单易用且功能强大的Java安全框架,它能够为Web应用系统提供用户认证、授权、数据加密以及会话管理等功能,可以为任何应用提供强大的安全保障。由于其易用性、灵活性、对Web的支持、可插拔、强大的技术支持等特性,在权限管理系统中得到了广泛的应用。

2 前后端分离框架技术在权限系统中的应用分析

在所有的权限管理系统中,都需要实现以下两方面的功能,一是确定访问系统的用户身份,二是对用户的权限进行管理。在传统前后端不分离的情况下,路由都由后端统一管理,通过对访问的URL进行验证实现权限的管理。在前后端分离模式中,由于前后端都有相应的路由,而且项目不再基于session了,如何确定访问者的身份、确认访问者的权限呢?

2.1 基于角色的访问控制(RBAC)

在不同的应用系统中,权限管理系统的权限控制部分是不同的,传统的权限管理在应用于不同的系统时,需要对权限控制部分进行重新设计,因此,基于角色的访问控制得到了应用。它将用户和系统的权限进行了分离,用户在系统中可以配置为不同的角色,通过角色获得该角色所拥有的权限,不仅有效地减少了授权的复杂性,还降低了出错的概率。

在RBAC 模型中,主要分为用户、角色、权限、资源和操作五个元素,通过将用户与系统权限分离,使得系统中用户的认证和授权更加灵活。一个用户可以拥有多个角色,因此,一个用户可以根据不同的应用场景,相应地拥有不同的角色所拥有的权限。

RBAC模型主要分为用户表、角色表、用户角色表、资源表、角色资源表,用户表保存用度的账号、密码等信息,角色保存用户角色,用户角色表保存用户的角色,角色资源表保存角色所拥有的权限,资源表保存系统中存在的资源,主要url、path、component、name等字段,path表示后端接口的路径,用于后端权限控制;path表示前端路由的路径,用于前端页面级的权限验证。component表示前端路由路径下的组件;name表示菜单的名称,parentID表示父级菜单的编号,用于生成菜单。

2.2 身份验证与权限认证

当用户访问权限管理系统时,首先判断用户是否执行了登录操作,如果用户没有登录,Apache Shiro的安全模块会阻止用户访问一切资源,只有用户通过身份认证才可以使用系统,当ApacheShiro接收到用户的登录请求后,会通过该请求获得用户在登录页面输入的用户名和密码,然后查询数据库,取得用户的相关信息,例如密码,然后与用户输入的进行比对,如果比对成功则说明用户是合法用户,则允许用户进入权限管理主界面,否则返回给前端相应的错误信息。

当用户通过身份验证之后,Shiro会将已登录用户的相关信息保存在Session对象中,例如其上次登录时间、时间戳、最后操作时间等。当用户退出系统后,存储该用户相关信息的Session将会被系统清理,也就是说用户再次访问系统必须重新进行登录。

RBAC中用户的权限是与其当前的角色相关的,不同的角色在系统中的权限不同,用户成功登录后,服务端即根据数据库中用户的角色,取得该用户所拥有的所有权限,当前端访问后端API时,Shiro会根据数据库中的用户权限进行认证,如果认证失败,则向前端返回认证失败信息,从而实现权限认证。

2.3 前后端技术在系统中职责的改变

前后端分离后,由于前后端都有相應的路由技术,权限管理则面临着前端一个页面同时调用后端多个接口的问题,传统的通过URL对用户权限进行验证方法则不适用了,因此,则需要前后端共同对权限进行控制。

前后端分离后,基本思想是,前端通过后端提供的API接口向服务端(后端)请求数据,请求时需要携带token信息,服务端(后端)则根据token判断用户的登录状态、用户的权限等。

前端主要实现用户登录页面、错误信息页和管理系统主页面三个页面,用户登录成功时跳转到管理系统主页。在进入主页之前,通过调用后端API接口获取用户角色所对应的资源,生成系统管理菜单,然后通过菜单的点击实现前端的路由跳转,以加载呈现不同的功能页面,实现相关业务的操作。

在此种情况下,会出现另外一个问题,假如某个用户登录之后记下了一个自己没有访问权限的路由URL,然后通过在地址栏手动输入该URL以访问受限的资源,因为实现了前后端分离,此时的后端并不了解前端路由变化引起的页面跳转,则会给系统带来极大的安全隐患。所以在前后端的分离中,除了后端进行权限的认证外,前端同样也需要进行权限的认证。在Vue.js中可以通过它提供的路由守卫来进行逻辑判断,实现前端的权限认证。例如在路由进入前的钩子中,首先获取存储在cookie中的token信息,如果没有token信息,则通过前端路由跳转到用户登录页面。如果存在token信息,则对用户需要访问的目标(资源)进行权限的判断,如果不需要授权,则直接进行访问,如果需要进行授权,则根据后端返回给前端的用户信息,进行权限的验证,如果在授权页面中,则构造路由信息,动态加载路由信息,访问目标页面。

后端则除了进行传统的权限认证管理外,还需要根据权限控制的粒度向前端返回不同的数据。例如页面权限,后端根据用户信息筛选有权限的页面(接口)返回给前端相应的用户信息;按钮权限,后端则将用户拥有的按钮数据返回给前端,前端通过自定义的相关指令判断用户是否拥有特定按钮的权限。

3 结论

随着互联网技术的发展和应用的深入,应用系统的安全性越来越受到人们的关注。本文基于目前流行的前后端分离技术架构,对基于RBAC权限管理系统的设计进行探索和分析,对目前常用的前后端开发技术在系统中的应用进行思考,本文仅仅对应用前后端分离技术进行权限管理进行了分析,并没有进行实现,通过本文,有望能为系统的开发者提供一个设计的思路,提供一个参考。

参考文献:

[1] 王锋,刘俊波.前后端分离模式下的WEB系统集成方案[J].通信技术,2020,53(9):2347-2350.

[2] 廖祥.基于前后端分离架构的用户权限控制系统设计与实现[J].软件工程,2020,23(12):24-26.

[3] 宋清卿.前后端分离Web系统下一种访问控制方法的设计与实现[J].计算机时代,2020(5):23-26.

[4] 何鼎权,胡辉,严家成.基于RBAC的通用权限管理系统[J].电脑知识与技术,2020,16(33):97-102.

[5] 傅安中,王祥荣.基于Apache Shiro的储物管理系统权限管理研究与实现[J].电脑编程技巧与维护,2020(3):99-102.

[6] 白嘉萌,寇英帅,刘泽艺,等.云计算平台基于角色的权限管理系统设计与实现[J].信息网络安全,2020,20(1):75-82.

【通联编辑:唐一东】