掌桥专利:专业的专利平台
掌桥专利
首页

权限控制方法、装置、服务器以及计算机存储介质

文献发布时间:2023-06-19 11:16:08


权限控制方法、装置、服务器以及计算机存储介质

技术领域

本公开实施例涉及计算机技术领域,更具体地,涉及一种权限控制方法、装置、服务器以及计算机存储介质。

背景技术

服务器中部署有封装了业务逻辑的业务组件。服务器通过运行业务组件中的程序,能够对数据进行业务逻辑处理。对于基于java语言编写的程序,业务组件中还能够设置拦截器。在此情况下,业务组件中的程序包括用于运行业务逻辑的业务程序和用于执行权限控制功能(即拦截器)的权限控制程序。

权限控制程序通常需要根据实际情况进行调整。目前,上述调整的过程都是从业务组件中读取权限控制程序的权限控制代码,并对该权限控制代码进行修改。然而,在读取权限控制代码过程中,业务组件中业务程序的业务代码也会一并被读取,由此造成了对业务代码的入侵。

发明内容

本公开实施例的一个目的是提供一种权限控制的新的技术方案。

根据本公开的第一方面,提供了一种权限控制方法,包括:接收用于启动业务的启动指令;根据启动指令,在业务对应的业务组件中添加业务对应的权限,以使得加载业务组件后,通过运行业务组件对业务进行权限控制。

可选地,根据启动指令,在业务对应的业务组件中添加业务对应的权限,包括:获取预先配置在启动指令中的权限控制代码;将权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,通过运行业务组件对业务进行权限控制,包括:响应业务调用请求,获取预先配置在启动指令中的认证服务器地址;根据认证服务器地址向认证服务器发送鉴权请求,以便认证服务器根据鉴权请求对业务调用请求进行鉴权认证;在业务调用请求通过鉴权认证的情况下,运行业务组件中的业务。

可选地,将权限控制代码添加在业务组件中与业务对应的业务代码的头部,包括:通过字节码增强技术将权限控制代码添加在业务代码的头部。

可选地,接收用于启动业务的启动指令之前,还包括:在启动指令中配置代理程序;根据启动指令,在业务对应的业务组件中添加业务对应的权限,包括:运行代理程序,以获取预先配置在启动指令中的权限控制代码,以及将权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,通过运行业务组件对业务进行权限控制之后,还包括:删除代理程序。

根据本公开的第二方面,还提供了一种权限控制装置,包括:接收模块,用于接收用于启动业务的启动指令;处理模块,用于根据接收模块接收的启动指令,在业务对应的业务组件中添加业务对应的权限,以使得加载业务组件后,通过运行业务组件对业务进行权限控制。

可选地,处理模块包括:获取子模块,用于获取预先配置在启动指令中的权限控制代码;添加子模块,用于将获取子模块获取的权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,权限控制装置还包括:运行模块,用于响应业务调用请求,获取预先配置在启动指令中的认证服务器地址;根据认证服务器地址向认证服务器发送鉴权请求,以便认证服务器根据鉴权请求对业务调用请求进行鉴权认证;在业务调用请求通过鉴权认证的情况下,运行业务组件中的业务。

可选地,添加子模块用于通过字节码增强技术将权限控制代码添加在业务代码的头部。

可选地,权限控制装置还包括:配置模块,用于在接收用于启动业务的启动指令之前,在启动指令中配置代理程序;处理模块用于运行代理程序,以获取配置模块预先配置在启动指令中的权限控制代码,以及将权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,权限控制装置还包括:删除模块,用于删除代理程序。

根据本公开的第三方面,还提供了一种服务器,包括存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序,以实现根据本公开第一方面所述的方法。

根据本公开的第四方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序在被处理器执行时实现根据本公开的第一方面所述的方法。

本公开实施例的一个有益效果在于,不再将权限控制代码直接配置在业务组件中,而是在接收到用于启动业务的启动指令后,根据启动指令在业务对应的业务组件中添加业务对应的权限,在此情况下,业务组件在加载之前并没有设置权限控制代码,因此在修改权限控制代码时,无需从业务组件中读取代码,从而避免对业务组件中的业务代码造成入侵;在加载业务组件后,由于业务组件中已经添加了业务对应的权限,因此通过运行业务组件能够实现业务对应权限控制功能,以保证业务对应的权限控制功能实现。

通过以下参照附图对本公开的示例性实施例的详细描述,本公开实施例的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且连同其说明一起用于解释本公开实施例的原理。

图1A为本公开所属技术领域中现有技术的一示意图;

图1B为本公开所属技术领域中现有技术的另一示意图;

图2为根据本公开一些实施例的一种权限控制方法的方法流程图;

图3为根据本公开一些实施例的另一种权限控制方法的方法流程图;

图4为根据本公开一些实施例的字节码修改过程示意图;

图5为根据本公开一些实施例的一种权限控制方法得到的权限组件中的字节码示意图;

图6为根据本公开一些实施例的再一种权限控制方法的方法流程图;

图7为根据本公开一些实施例的一种权限控制装置的功能结构框图;

图8为根据本公开一些实施例的一种服务器的功能结构框图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

对于基于java语言编写的程序,可以通过软件开发工具包(softwaredevelopment kit,简称SDK)或者java运行环境(java runtime environment,简称JRE)对运行于设备上的权限控制代码进行修改,例如通过SDK对服务器的业务组件中的权限控制代码进行修改,以使得权限控制代码能够符合实际要求。SDK可以通过maven依赖形式引入。

示例地,如图1A和图1B所示,A为连接在服务器B上的终端(例如客户机)。终端A向服务器B发送用于启动业务程序的启动指令e,以启动服务器B中的业务组件C;服务器B响应接收到的来自终端A的启动指令e,运行业务组件C,并将运行结果携带在反馈消息f中以反馈给终端A。

在一些示例中,如图1A所示,业务组件C中仅配置有运行业务逻辑的业务程序的业务代码,例如图1A中的“int c=a+b”为业务程序中的一段业务代码。在另一些示例中,如图1B所示,业务组件C中配置上述业务代码和用于执行权限控制功能的权限控制程序的权限控制代码,如图1B中“Public booleancheckCookie(){······}”为业务组件C中的权限控制程序中的一段权限控制代码。

在如图1B所示的场景下,权限控制程序的权限控制代码通常需要根据实际情况进行调整。目前,调整权限控制代码的过程需要从业务组件中读取权限控制代码以对权限控制代码进行修改,在此过程中,业务程序的业务代码会一并被读取,由此造成了对业务代码的入侵。

基于此,如果能够将权限控制代码与业务代码进行分离,使得读取权限控制代码时不再读取业务代码,并且运行业务组件时又可以正常运行业务程序与权限控制程序,便可以解决上述的对业务代码造成的入侵的问题。

下面,参照附图描述根据本公开的各个实施例和例子。

<方法实施例>

图2是根据本公开一些实施例的权限控制方法的流程示意图。如图 2所示,本公开一些实施例的权限控制方法可以包括如下步骤S210~S220:

步骤S210:接收用于启动业务的启动指令。

启动指令用于启动业务程序。业务程序用于执行业务逻辑,业务程序需要加载在Java虚拟机中运行,以便对加载在该Java虚拟机(Java virtual machine,简称JVM)的数据进行业务逻辑处理。

服务器中可以有一个或多个业务组件,每个业务组件中封装有业务程序。

在一些示例中,启动指令中预先配置有权限控制代码。例如在启动指令的启动参数中配置权限控制代码。

在另一些示例中,启动指令中预先配置有权限控制代码的获取地址。例如在启动指令的启动参数中预先配置权限控制代码的获取地址。

步骤S220:根据启动指令,在业务对应的业务组件中添加业务对应的权限,以使得加载业务组件后,通过运行业务组件对业务进行权限控制。

在一些示例中,获取预先配置在启动指令中的权限控制代码,例如获取预先配置在启动指令的启动参数中的权限控制代码,然后将权限控制代码添加在业务组件中与上述业务对应的业务代码的头部,从而实现在业务对应的业务组件中添加业务对应的权限的目的。在此情况下,在加载业务组件后,运行业务组件,业务组件能够执行权限控制代码对应的权限控制逻辑,以对业务进行权限控制。

在另一些示例中,根据启动指令,获取启动指令的启动参数中权限控制代码的获取地址,从该获取地址获取权限控制代码。

由此可见,本公开实施例中,不再将权限控制代码直接配置在业务组件中,而是在接收到用于启动业务的启动指令后,根据启动指令在业务对应的业务组件中添加业务对应的权限,在此情况下,业务组件在加载之前并没有设置权限控制代码,因此在修改权限控制代码时,无需从业务组件中读取代码,从而避免对业务组件中的业务代码造成入侵;在加载业务组件后,由于业务组件中已经添加了业务对应的权限,因此通过运行业务组件能够实现业务对应权限控制功能,以保证业务对应的权限控制功能实现。

图3是根据本公开一些实施例的权限控制方法的流程示意图。如图 3所示,本公开一些实施例的权限控制方法可以包括如下步骤S310~S330:步骤S310,在启动指令中配置代理程序。

在本公开实施例中,可以预先在启动指令的启动参数中配置代理程序,即:将代理程序作为启动参数中的一项参数配置在启动指令中,以便在服务器响应启动指令启动业务程序之前,首先运行启动参数中的代理程序。

步骤S320,运行代理程序,以获取预先配置在启动指令中的权限控制代码,以及将权限控制代码添加在业务组件中与业务对应的业务代码的头部。

Java虚拟机在运行程序之前,会对程序的代码的格式进行编辑,即将该程序的代码编译为能够被Java虚拟机识别的字节码。Java虚拟机在运行业务代码和权限控制代码之前,将业务代码编译为对应的业务字节码,将权限控制代码编译为对应的权限控制字节码。在此情况下,可以采用字节码增强技术将权限控制代码添加在业务代码的头部,形成业务组件中的执行代码。

示例地,如图4所示,在接收到启动指令e后,从启动参数中获取权限字节码并执行修改字节码的流程,即采用字节码增强技术将权限控制代码添加在业务代码的头部,以便Java虚拟机执行业务组件中的执行代码并生成执行结果,图4中反馈消息f中携带业务组件C的执行结果。

结合图1B和图5所示,首先参见图1B,在逻辑上,权限控制代码的权限控制逻辑在执行业务代码中的业务逻辑之前执行,例如在对数据进行执行业务代码中的业务逻辑之前,首先要执行权限控制代码的权限控制逻辑,如验证用户登录信息(如用户的登录名和登录密码),检查用户开放的权限类型等。因此,结合图1B和图5,通过字节码增强技术将权限控制代码添加在业务代码的头部,权限控制代码的权限控制逻辑依然在执行业务代码中的业务逻辑之前执行。假设图5和图1B中的权限控制代码相同,业务代码也相同,在此情况下,图5得到的业务组件中的执行代码与图1B的业务组件中的代码是一致的。

另外,在现有技术中,由于权限控制代码和业务代码自始至终都配置在业务组件中,在对权限控制代码和业务代码进行修改时,对权限控制代码和业务代码进行修改的线程是一个线程,灵活性偏低。本公开实施例不仅能够避免入侵业务代码,还能够将权限控制代码和业务代码的编程过程分开,修改权限控制代码和业务代码的线程分别对应两个线程,例如,修改权限控制代码过程可以是通过SDK读取启动参数中的权限控制代码并对其进行修改,修改业务代码的过程可以是通过SDK读取业务组件中的代码并对其进行修改,在此情况下,修改权限控制代码和修改业务代码可以分别同时进行,二者互不影响,提升了编程过程的灵活性。

步骤S330,加载业务组件。

将业务组件加载在Java虚拟机中,以使得Java虚拟机运行该业务组件中的程序(即执行业务组件中的执行代码),执行该程序对应的权限控制逻辑和业务逻辑。

在一些实施例中,为了实现对代理程序进行灵活配置的目的,在通过业务组件对业务进行权限控制之后,还可以删除上述代理程序。删除上述代理程序的过程可以主动由服务器主动执行,例如在业务组件完成运行之后,直接删除上述代理程序;或者,删除上述代理程序的过程也可以是在对应指令的触发下执行。例如在业务组件完成运行之后,在接收到删除指令的情况下,根据上述删除指令对启动参数中的代理程序执行删除操作,使得代理程序结束运行后不再占据内存空间,方便为下一次配置代理程序留下存储空间,同时实现对代理程序的灵活配置。

在一些实施例中,在执行步骤S330之后,在接收到的业务调用请求的情况下,执行业务组件的程序中的权限控制逻辑,即执行业务组件的权限控制代码,以对接收到的业务调用请求进行鉴权认证。如图6所示,本公开实施例还可以执行如下步骤S610~S630:

步骤S610:响应业务调用请求,获取预先配置在启动参数中的认证服务器地址。

业务调用请求为访问业务组件的请求,业务调用请求用于调用服务器中的数据,使得业务组件对该数据进行业务逻辑处理。认证服务器地址预先配置在用于启动业务程序的启动参数中。

步骤S620:根据认证服务器地址向认证服务器发送鉴权请求,以便于认证服务器根据鉴权请求对业务调用请求进行鉴权认证。

通过认证服务器对业务调用请求进行鉴权认证,可以保证业务调用请求的安全性。

步骤S630:在业务调用请求通过鉴权认证的情况下,执行业务组件中的业务代码。

要说明的是,现有技术中,对权限控制代码进行鉴权认证的服务器地址也会随实际情况而发生改变,并且认证服务器地址写在业务组件的程序中,在此情况下,若要修改认证服务器地址,需要从业务组件中读取全部代码。基于此,通过本公开实施例中的方案,使得修改认证服务器地址时,仅需在启动参数中对认证服务器地址重新进行配置即可,无需再从业务组件中读取全部代码,避免对业务组件中的代码形成入侵。

<设备实施例>

图7是根据本公开一些实施例的一种权限控制装置的功能结构框图。如图7所示,权限控制装置70可以包括接收模块71、处理模块72。

接收模块71,用于接收用于启动业务的启动指令。

处理模块72,用于根据接收模块71接收的所述启动指令,在业务对应的业务组件中添加业务对应的权限,以使得加载业务组件后,通过运行业务组件对业务进行权限控制。

可选地,处理模块71可以包括获取子模块和添加子模块(图7中未示出)。

获取子模块用于获取预先配置在启动指令中的权限控制代码。

添加子模块用于将获取子模块获取的权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,添加子模块用于通过字节码增强技术将权限控制代码添加在业务代码的头部。

可选地,权限控制装置70还可以包括运行模块(图7中未示出)。运行模块用于响应业务调用请求,获取预先配置在启动指令中的认证服务器地址;根据认证服务器地址向认证服务器发送鉴权请求,以便认证服务器根据鉴权请求对业务调用请求进行鉴权认证;在业务调用请求通过鉴权认证的情况下,运行业务组件中的业务。

可选地,权限控制装置70还可以包括配置模块(图7中未示出)。配置模块用于在接收模块71接收用于启动业务的启动指令之前,在启动指令中配置代理程序。在此情况下,处理模块71用于运行代理程序,以获取配置模块预先配置在启动指令中的权限控制代码,以及将权限控制代码添加在业务组件中与业务对应的业务代码的头部。

可选地,权限控制装置70还可以包括删除模块(图7中未示出),用于删除代理程序。

图8是根据本公开一些实施例的服务器的功能结构框图。

如图8所示,该服务器800包括处理器810和存储器820,该存储器820用于存储可执行的计算机程序,该处理器810用于根据该计算机程序的控制,执行如以上任意方法实施例的方法。

以上权限控制装置的各模块可以由本实施例中的处理器810执行存储器820存储的计算机程序实现,也可以通过其他电路结构实现,在此不做限定。

本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和 /或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/ 或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/ 或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本公开的范围由所附权利要求来限定。

相关技术
  • 权限控制方法、装置、服务器以及计算机存储介质
  • 权限控制方法、权限控制装置及计算机存储介质
技术分类

06120112859292