基于条件分词的权限控制方法、装置、系统及存储介质
文献发布时间:2023-06-19 10:19:37
技术领域
本发明涉及权限控制技术领域,具体而言,涉及基于条件分词的权限控制方法、装置、系统及存储介质。
背景技术
随着智能财税平台越来越多,客户对软件的安全性要求也越来越高,现有方案一般是仅在前端对菜单、按钮进行隐藏/显示,后端方法不做访问限制。或是使用一些框架自带的方法。仅依靠前端控制会导致使用者绕过前端,直接调用后端方法,这造成越权和数据安全问题,而使用其他框架则限制较多,且缓存严重,无法自定义校验条件和过程,自由度不高。
发明内容
本发明解决的问题是如何提供安全且高自由度的权限控制方法。
为解决上述问题,本发明提供一种基于条件分词的权限控制方法,包括:获取用于实现权限控制的控制条件;对所述控制条件进行分词处理,得到语法对象;构造解析器,根据所述解析器对所述语法对象进行解析,以实现所述权限控制。
本发明所述的基于条件分词的权限控制方法,通过特定的解析器对语法对象进行解析,有效保证了对权限的控制,提高了安全的权限控制方式,同时由于框架相对较少,有效保证了权限控制的自由度和效率,使得权限控制具有高效率、低耗时和可复用的优点。
优选地,所述获取用于实现权限控制的控制条件包括:定义注解,并设置用于告知校验规则的condition属性,和用于调用方法的function属性;定义切面,并交由Spring管理;指定切入点为注解,以适于在所有有所述注解的地方切入;指定切入时机为Around,当校验失败时适于抛出异常来阻断后续操作。
本发明所述的基于条件分词的权限控制方法,通过定义注解,再定义切面,接着指定切入点为注解,最后指定切入时机为Around,采用了AOP切面编程,利用注解和切面作为载体,因而能够实现权限控制,有效提高了权限控制方法的安全性和自由度。
优选地,所述对所述控制条件进行分词处理包括:定义分词类型,所述分词类型包括START、VAR、OPERATER和VAL;定义分词结果,所述分词结果包括分词类型和分词完整的字符串;依次判断所述控制条件的字符串中每一个字符,当所述字符相对相邻的前一个字符的分词类型不变时,将所述字符追加进相邻的前一个字符后继续判断相邻的后一个字符,当所述字符相对相邻的前一个字符的分词类型改变时,返回单个分词结果。
本发明所述的基于条件分词的权限控制方法,通过对控制条件的字符串中每一个字符进行判断,实现字符追加或返回分词结果,进而实现分词处理,因而能够实现权限控制,有效提高了权限控制方法的安全性和自由度。
优选地,所述对所述控制条件进行分词处理还包括:获取所述分词结果,将所述分词结果按照VAR、OPERATER和VAL的顺序排列,并判断所述VAL的基本类型,若所述基本类型为string型,将所述OPERATER转换为equals,若所述基本类型为int型,将所述OPERATER转为==、>或<;判断所述分词结果是否匹配方法调用格式,若匹配则将所述分词结果标记为方法调用,若不匹配则将所述分词结果标记为条件判断,其中,所述方法调用与所述function属性对应,所述条件判断与所述condition属性对应;将所述分词结果合并生成语法对象,其中,所述语法对象包括条件类语法对象和方法调用类语法对象。
本发明所述的基于条件分词的权限控制方法,通过对分词结果进行判断生成条件类语法对象和方法调用类语法对象,以作为解析器的解析方法入参,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
优选地,所述构造解析器包括:定义语法对象解析器;所述解析器实例化时查询用户相关信息,并将与所述用户相关信息对应的属性名称和值以key-value形式存入所述解析器内部静态data map中;所述解析器实例化时获得权限校验实体类,将所述权限校验实体类放入所述解析器内部作为根对象,其中,所述权限校验实体类用于处理所述方法调用类语法对象;定义核心方法parse,将所述核心方法parse入参为自定义的语法对象,以构造所述解析器。
本发明所述的基于条件分词的权限控制方法,通过构造解析器,以满足条件类语法对象和方法调用类语法对象的调用,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
优选地,所述根据所述解析器对所述语法对象进行解析,以实现所述权限控制包括:当所述入参为所述条件类语法对象时,获取所述条件类语法对象的VAR字段,调用所述解析器内部data map的get方法获取参数的当前值;获取所述条件类语法对象的期望值,并与所述当前值按照所述OPERATER进行比较;若比较通过则权限验证通过允许访问,若比较失败则抛出异常并阻断操作。
本发明所述的基于条件分词的权限控制方法,通过调用解析器内部data map的get方法,实现对条件类语法对象的解析,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
优选地,所述根据所述解析器对所述语法对象进行解析,以实现所述权限控制还包括:当所述入参为所述方法调用类语法对象时,获取所述方法调用类语法对象的完整字符;获取所述解析器根对象并利用反射机制调用所述根对象的对应方法,根据所述字符和所述根对象的对应方法获取返回值,若返回值为成功则权限验证通过允许访问,若返回值为失败则拒绝访问。
本发明所述的基于条件分词的权限控制方法,通过获取解析器根对象并利用反射机制调用根对象的对应方法获取返回值,实现对方法调用类语法对象的解析,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
本发明还提供一种基于条件分词的权限控制装置,包括:获取模块,用于获取用于实现权限控制的控制条件;分词模块,用于对所述控制条件进行分词处理,得到语法对象;解析模块,用于构造解析器,根据所述解析器对所述语法对象进行解析,以实现权限控制。所述基于条件分词的权限控制装置与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
本发明还提供一种基于条件分词的权限控制系统,包括存储有计算机程序的计算机可读存储介质和处理器,所述计算机程序被所述处理器读取并运行时,实现如上所述的基于条件分词的权限控制方法。所述基于条件分词的权限控制系统与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器读取并运行时,实现如上所述的基于条件分词的权限控制方法。所述计算机可读存储介质与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
附图说明
图1为本发明实施例所述的基于条件分词的权限控制方法的流程图;
图2为本发明实施例所述的注解和切面配置流程示意图;
图3为本发明实施例所述的条件分词处理整体流程示意图;
图4为本发明实施例所述的条件分词方法流程示意图;
图5为本发明实施例所述的解析器初始化示意图;
图6为本发明实施例所述的语法对象解析方法示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
如图1所示,本发明实施例提供一种基于条件分词的权限控制方法,包括:获取用于实现权限控制的控制条件;对所述控制条件进行分词处理,得到语法对象;构造解析器,根据所述解析器对所述语法对象进行解析,以实现所述权限控制。
具体地,在本实施例中,基于条件分词的权限控制方法包括:获取用于实现权限控制的控制条件;对控制条件进行分词处理,得到语法对象;构造解析器,根据解析器对语法对象进行解析,以实现权限控制。即在后端采用了AOP切面编程,利用注解和切面作为载体,对注解属性进行简单的词法分析形成结果集,再将结果集放入自定义的解析器中进行提取和比对,从而实现权限控制。一方面,通过特定的解析器对语法对象进行解析,有效保证了对权限的控制,另一方面由于框架相对较少,有效保证了权限控制的自由度和效率。相对于传统的在控制器方法内手写查询方法并判断权限的方式,该方法有高效率、低耗时、可复用的特点。使得开发人员可自定义分词规则和语法生成规则,并根据规则编写判断过程,自由度大大提升,因而实现了高可用性、高安全性、高整合度的鉴权方式。
在本实施例中,通过特定的解析器对语法对象进行解析,有效保证了对权限的控制,提高了安全的权限控制方式,同时由于框架相对较少,有效保证了权限控制的自由度和效率,使得权限控制具有高效率、低耗时和可复用的优点。
可选地,所述获取用于实现权限控制的控制条件包括:定义注解,并设置用于告知校验规则的condition属性,和用于调用方法的function属性;定义切面,并交由Spring管理;指定切入点为注解,以适于在所有有所述注解的地方切入;指定切入时机为Around,当校验失败时适于抛出异常来阻断后续操作。
具体地,在本实施例中,获取用于实现权限控制的控制条件包括:定义注解,并设置用于告知校验规则的condition属性,和用于调用方法的function属性;定义切面,并交由Spring管理;指定切入点为注解,以适于在所有有注解的地方切入;指定切入时机为Around,当校验失败时适于抛出异常来阻断后续操作。结合图2所示,按照A-B-C-D的顺序,首先定义注解,再定义切面,接着指定切入点为注解,最后指定切入时机为Around,即采用了AOP切面编程,利用注解和切面作为载体,因而能够实现权限控制,有效提高了权限控制方法的安全性和自由度。
其中,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。因此,本质上是通过自定义的注解和切面获取用于实现权限控制的控制条件。
其中,Around是一个权限管理解决方案,它基于Springboot实现,遵循阿里java开发手册,代码实现相对于Springmvc来说更加优雅。缓存可以不基于任何缓存复杂臃肿的缓存系统,但是简单的实现了自带的redis缓存。
在本实施例中,通过定义注解,再定义切面,接着指定切入点为注解,最后指定切入时机为Around,采用了AOP切面编程,利用注解和切面作为载体,因而能够实现权限控制,有效提高了权限控制方法的安全性和自由度。
可选地,所述对所述控制条件进行分词处理包括:定义分词类型,所述分词类型包括START、VAR、OPERATER和VAL;定义分词结果,所述分词结果包括分词类型和分词完整的字符串;依次判断所述控制条件的字符串中每一个字符,当所述字符相对相邻的前一个字符的分词类型不变时,将所述字符追加进相邻的前一个字符后继续判断相邻的后一个字符,当所述字符相对相邻的前一个字符的分词类型改变时,返回单个分词结果。
具体地,在本实施例中,对控制条件进行分词处理包括:定义分词类型,分词类型包括START、VAR、OPERATER和VAL;定义分词结果,分词结果包括分词类型和分词完整的字符串;依次判断控制条件的字符串中每一个字符,当字符相对相邻的前一个字符的分词类型不变时,将字符追加进相邻的前一个字符后继续判断相邻的后一个字符,当字符相对相邻的前一个字符的分词类型改变时,返回单个分词结果。结合图3和图4所示,首先输入条件字符串,进入while循环,获取单个字符,初始分词类型为START,并分别在case START下对字符分词类型进行判断,当字符为空时,返回至获取单个字符,而当字符分词类型为字母时,分词为VAR,当字符分词类型为=,>,<时,分词为OPERATER,当字符分词类型为数字时,分词为VAL。在case VAR下,若当前字符分词类型为字母,则追加进去,否则回归START。在caseOPERATER下,若当前字符分词类型为操作符,则追加进去,否则回归START。在case VAL下,若当前字符分词类型为数字,则追加进去,否则回归START。当分词类型不变时,将字符追加进上个字符后继续循环,当分词类型发生改变时,返回分词结果。
在本实施例中,通过对控制条件的字符串中每一个字符进行判断,实现字符追加或返回分词结果,进而实现分词处理,因而能够实现权限控制,有效提高了权限控制方法的安全性和自由度。
可选地,所述对所述控制条件进行分词处理还包括:获取所述分词结果,将所述分词结果按照VAR、OPERATER和VAL的顺序排列,并判断所述VAL的基本类型,若所述基本类型为string型,将所述OPERATER转换为equals,若所述基本类型为int型,将所述OPERATER转为==、>或<;判断所述分词结果是否匹配方法调用格式,若匹配则将所述分词结果标记为方法调用,若不匹配则将所述分词结果标记为条件判断,其中,所述方法调用与所述function属性对应,所述条件判断与所述condition属性对应;将所述分词结果合并生成语法对象,其中,所述语法对象包括条件类语法对象和方法调用类语法对象。
具体地,在本实施例中,对控制条件进行分词处理还包括:获取分词结果,将分词结果按照VAR、OPERATER和VAL的顺序排列,并判断VAL的基本类型,若基本类型为string型,将OPERATER转换为equals,若基本类型为int型,将OPERATER转为==、>或<;判断分词结果是否匹配方法调用格式,若匹配则将分词结果标记为方法调用,若不匹配则将分词结果标记为条件判断,其中,方法调用与function属性对应,条件判断与condition属性对应;将分词结果合并生成语法对象,其中,语法对象包括条件类语法对象和方法调用类语法对象。结合图3所示,首先获取分词结果List,按照VAR->OPERATER->VAL顺序排列,再判断VAL的基本类型,若基本类型为string型,将OPERATER转换为equals,若基本类型为int型,将OPERATER转为==、<和>;判断分词结果是否匹配方法调用格式,即是否匹配‘()’或‘(xxx)’格式,若匹配则将分词结果标记为方法调用,若不匹配则将分词结果标记为条件判断;将分词结果合并生成条件类语法对象和方法调用类语法对象,作为解析方法入参。
在本实施例中,通过对分词结果进行判断生成条件类语法对象和方法调用类语法对象,以作为解析器的解析方法入参,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
可选地,所述构造解析器包括:定义语法对象解析器;所述解析器实例化时查询用户相关信息,并将与所述用户相关信息对应的属性名称和值以key-value形式存入所述解析器内部静态data map中;所述解析器实例化时获得权限校验实体类,将所述权限校验实体类放入所述解析器内部作为根对象,其中,所述权限校验实体类用于处理所述方法调用类语法对象;定义核心方法parse,将所述核心方法parse入参为自定义的语法对象,以构造所述解析器。
具体地,在本实施例中,构造解析器包括:定义语法对象解析器;解析器实例化时查询用户相关信息,并将与用户相关信息对应的属性名称和值以key-value形式存入解析器内部静态data map中;解析器实例化时获得权限校验实体类,将权限校验实体类放入解析器内部作为根对象,其中,权限校验实体类用于处理方法调用类语法对象;定义核心方法parse,将核心方法parse入参为自定义的语法对象,以构造解析器。结合图5所示,定义语法对象解析器,构造函数传入语法对象,具体包括:用户基本信息例如name,age,role,permission,mobile等等,以key-value形式存入解析器内部静态data map中,以供条件类语法对象调用;将权限校验实体类放入解析器内部作为根对象,即rootObject,用于处理方法调用类语法对象,该实体类含有大量的诸如isSuperAdmin(),hasRole(999),canAccess()等返回true/false的public方法;以及定位核心方法parse,入参为自定义的语法对象。
在本实施例中,通过构造解析器,以满足条件类语法对象和方法调用类语法对象的调用,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
可选地,所述根据所述解析器对所述语法对象进行解析,以实现所述权限控制包括:当所述入参为所述条件类语法对象时,获取所述条件类语法对象的VAR字段,调用所述解析器内部data map的get方法获取参数的当前值;获取所述条件类语法对象的期望值,并与所述当前值按照所述OPERATER进行比较;若比较通过则权限验证通过允许访问,若比较失败则抛出异常并阻断操作。
具体地,在本实施例中,根据解析器对语法对象进行解析,以实现权限控制包括:当入参为条件类语法对象时,获取条件类语法对象的VAR字段,调用解析器内部data map的get方法获取参数的当前值;获取条件类语法对象的期望值,并与当前值按照OPERATER进行比较;若比较通过则权限验证通过允许访问,若比较失败则抛出异常并阻断操作。结合图6所示,解析语法对象,分为两种情况,解析条件类语法对象和解析方法调用类语法对象,其中,解析条件类语法对象包括:获取语法对象的VAR字段和VAL字段,调用解析器内部datamap的get方法获取该参数的当前值;获取语法对象的OPERATER字段,即可获取语法对象的期望值,并与当前值按照操作符进行比较;若比较通过则允许访问,若比较失败则抛出异常并阻断操作。或者符合操作符条件时返回true,否则返回false,只有结果为true时才可以继续访问。
在本实施例中,通过调用解析器内部data map的get方法,实现对条件类语法对象的解析,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
可选地,所述根据所述解析器对所述语法对象进行解析,以实现所述权限控制还包括:当所述入参为所述方法调用类语法对象时,获取所述方法调用类语法对象的完整字符;获取所述解析器根对象并利用反射机制调用所述根对象的对应方法,根据所述字符和所述根对象的对应方法获取返回值,若返回值为成功则权限验证通过允许访问,若返回值为失败则拒绝访问。
具体地,在本实施例中,根据解析器对语法对象进行解析,以实现权限控制还包括:当入参为方法调用类语法对象时,获取方法调用类语法对象的完整字符;获取解析器根对象并利用反射机制调用根对象的对应方法,根据字符和根对象的对应方法获取返回值,若返回值为成功则权限验证通过允许访问,若返回值为失败则拒绝访问。结合图6所示,解析方法调用类语法对象包括:获取方法类语法对象的完整字符串;将字符首字母转大写,并在开头拼接get关键字,生成如‘getXxx()’的格式;获取解析器根对象并利用反射机制调用根对象的对应方法获取返回值,根据返回值判断是否可以访问,只有结果为true时才可以继续访问。
在本实施例中,通过获取解析器根对象并利用反射机制调用根对象的对应方法获取返回值,实现对方法调用类语法对象的解析,进而实现权限控制,有效提高了权限控制方法的安全性和自由度。
本发明另一实施例提供一种基于条件分词的权限控制装置,包括:获取模块,用于获取用于实现权限控制的控制条件;分词模块,用于对所述控制条件进行分词处理,得到语法对象;解析模块,用于构造解析器,根据所述解析器对所述语法对象进行解析,以实现权限控制。所述基于条件分词的权限控制装置与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
本发明另一实施例提供一种基于条件分词的权限控制系统,包括存储有计算机程序的计算机可读存储介质和处理器,所述计算机程序被所述处理器读取并运行时,实现如上所述的基于条件分词的权限控制方法。所述基于条件分词的权限控制系统与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
本发明另一实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器读取并运行时,实现如上所述的基于条件分词的权限控制方法。所述计算机可读存储介质与上述基于条件分词的权限控制方法相对于现有技术所具有的优势相同,在此不再赘述。
虽然本发明公开披露如上,但本发明公开的保护范围并非仅限于此。本领域技术人员在不脱离本发明公开的精神和范围的前提下,可进行各种变更与修改,这些变更与修改均将落入本发明的保护范围。
- 基于条件分词的权限控制方法、装置、系统及存储介质
- 权限控制方法、权限控制装置、权限控制设备及存储介质