一种数据处理方法、装置、设备及存储介质与流程

文档序号:29806581发布日期:2022-04-23 22:20阅读:70来源:国知局
一种数据处理方法、装置、设备及存储介质与流程

1.本技术涉及计算机技术领域,尤其涉及一种数据处理方法、装置、设备及存储介质。


背景技术:

2.当系统接收用户的请求后,需要根据请求里的参数对请求进行规则校验,只有当校验通过后才能处理用户的请求操作。
3.现有技术中,通常将校验请求的规则写入静态xml文件中或采取硬编码的方式将校验规则写入代码中,硬编码是指将数据直接嵌入到程序或其他可执行对象的源代码中,只能通过编辑源代码和重新编译可执行文件来修改规则。因此当修改校验规则后,都需要改动程序并重启服务。
4.如果通过第三方界面将校验规则存入数据库中,每次接收到接口调用请求时,都要去查询数据库中的规则信息,降低了处理请求的效率。


技术实现要素:

5.本技术实施例提供了一种数据处理方法、装置、设备及存储介质,以便提高处理请求的效率。
6.第一方面,本技术实施例提供了一种数据处理方法,所述方法包括:
7.从数据库中获取第一规则信息,将所述第一规则信息存储到缓存中;
8.当接收到请求时,获取所述请求的参数信息;
9.根据所述参数信息,从所述缓存的第一规则信息中获取第二规则信息;
10.根据所述第二规则信息对所述请求进行校验。
11.在一种可能的实现方式中,所述第一规则信息包括:第一方法路径,所述参数信息包括:类名、方法名以及请求参数;
12.所述根据所述参数信息,从所述缓存的第一规则信息中获取第二规则信息包括:
13.将所述参数信息中的类名与方法名组成请求方法路径,将所述请求方法路径与所述第一方法路径相比较,获取所述第二规则信息,其中,所述第二规则信息包括第二方法路径,所述第二方法路径与所述请求方法路径相匹配。
14.在一种可能的实现方式中,所述第二规则信息包括校验字段以及校验模式;
15.所述根据所述第二规则信息对所述请求进行校验包括:
16.根据所述校验字段、所述校验模式以及所述请求参数,对所述请求进行校验。
17.在一种可能的实现方式中,所述方法包括:
18.当所述校验字段中包括分隔符时,利用所述分隔符将所述校验字段划分为多个字段;
19.将所述多个字段与所述请求参数相比较,从所述请求参数中获取与所述多个字段中任一字段相匹配的目标请求参数;
20.根据所述目标请求参数所属的校验模式,对所述请求进行校验。
21.在一种可能的实现方式中,所述从数据库中获取第一规则信息,将所述第一规则信息存储到缓存中包括:
22.配置针对所述数据库的异步任务,利用所述异步任务从所述数据库中获取所述第一规则信息,将所述第一规则信息存储到所述缓存中,其中,所述异步任务每间隔预设时间段执行一次。
23.在一种可能的实现方式中,所述将所述第一规则信息存储到缓存中包括:
24.将所述第一规则信息以键值对的形式存储到缓存中,其中,所述键值对中的关键字用于存储所述第一方法路径,所述键值对中的值用于存储所述第一规则信息。
25.在一种可能的实现方式中,所述当接收到请求时,获取所述请求的参数信息包括:
26.当接收到所述请求时,利用面向切面编程的方法拦截所述请求;
27.通过所述请求的切点类获取所述请求的参数信息。
28.第二方面,本技术实施例提供了一种数据处理装置,所述装置包括:存储模块、第一获取模块、第二获取模块以及校验模块;
29.所述存储模块,用于从数据库中获取第一规则信息,将所述第一规则信息存储到缓存中;
30.所述第一获取模块,用于当接收到请求时,获取所述请求的参数信息;
31.所述第二获取模块,用于根据所述参数信息,从所述缓存的第一规则信息中获取第二规则信息;
32.所述校验模块,用于根据所述第二规则信息对所述请求进行校验。
33.第三方面,本技术实施例提供了一种数据处理设备,所述设备包括:存储器以及处理器;
34.所述存储器用于存储相关的程序代码;
35.所述处理器用于调用所述程序代码,执行上述第一方面任意一种实施方式所述的数据处理方法。
36.第四方面,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行上述第一方面任意一种实施方式所述的数据处理方法。
37.由此可见,本技术实施例具有如下有益效果:
38.在本技术实施例的上述实现方式中,首先从数据库中获取第一规则信息,然后将第一规则信息存储到缓存中,其中,该第一规则信息每间隔预设时间段进行更新;当接收到请求时,获取该请求的参数信息,根据参数信息从缓存中所存储的第一规则信息中获取第二规则信息;根据第二规则信息对请求进行校验。本技术实施例提供的数据处理方法,可以将数据库中的规则信息存储到缓存中。当收到请求时,通过调用缓存中的规则信息对请求进行校验,提高处理请求的效率。
附图说明
39.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见,下面描述中的附图仅仅是本技术中提供的一些实施例,
对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
40.图1为本技术实施例中一种参数校验方法的流程图;
41.图2为本技术实施例中另一种参数校验方法的流程图;
42.图3为本技术实施例中一种数据处理方法的流程图;
43.图4为本技术实施例中一种规则信息存储到缓存的流程图;
44.图5为本技术实施例中一种数据处理装置的示意图;
45.图6为本技术实施例中一种数据处理设备的示意图。
具体实施方式
46.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整的描述,所描述的实施例仅为本技术示例性的实施方式,并非全部实现方式。本领域技术人员可以结合本技术的实施例,在不进行创造性劳动的情况下,获得其他的实施例,而这些实施例也在本技术的保护范围之内。
47.当系统接收用户的请求后,需要根据请求里的参数对请求进行规则校验,只有当校验通过后才能处理用户的请求操作。
48.现有技术中,通常将校验请求的规则写入静态xml文件中或采取硬编码的方式将校验规则写入代码中,因此当修改校验规则后,都需要改动程序并重启服务。其中,xml表示可扩展标记语言(extensible markup language),是一种用于标记电子文件使其具有结构性的标记语言。硬编码是指将数据直接嵌入到程序或其他可执行对象的源代码中,只能通过编辑源代码和重新编译可执行文件来修改规则。
49.而如果通过第三方界面将校验规则存入数据库中,替代硬编码的方式,每次接收到接口调用请求时,都要去查询数据库中的规则信息,也降低了处理请求的效率。下面将结合附图对上述解决方案所提供的参数校验方法进行说明。
50.参见图1,图1为本技术实施例中一种参数校验方法的流程图。
51.该方法具体包括以下步骤:
52.s101:将参数校验规则写入xml配置文件。
53.s102:使用map数据类型配置参数校验规则,其中map中的关键字为业务类,map中的值为该业务类的参数及应用于该参数的参数校验规则。
54.s103:当收到请求时,获取配置文件中的参数校验规则,通过面向切面编程的方法对请求进行校验。
55.其中,面向切面编程是一种通过预编译方式和运行期间动态代理实现程序功能的统一维护的技术。
56.上述解决方案中将参数校验规则写入xml配置文件中,当修改校验规则时,都需要修改配置文件的程序并重启服务,降低了处理请求的效率。
57.参见图2,图2为本技术实施例中另一种参数校验方法的流程图。
58.s201:在数据库中配置参数校验规则,其中,该参数校验规则可以通过第三方界面进行写入。
59.s202:当接收到接口调用请求时,根据接口名称从数据库中查询接口所对应的参数校验规则。
60.s203:根据该参数校验规则对请求进行处理。
61.通过第三方界面将参数校验规则写入数据库时,虽然避免了通过重启整个服务程序修改校验规则,但是每次接收到接口调用请求时,都需要查询数据中的参数校验规则,频繁对数据库进行读取操作导致资源浪费,也影响处理请求的效率。
62.基于此,本技术实施例提供了一种数据处理方法,通过将数据库中的规则信息存储到缓存中,提高处理请求的效率。具体实现时,首先从数据库中获取第一规则信息,然后将第一规则信息存储到缓存中,其中,该第一规则信息每间隔预设时间段进行更新;当接收到请求时,获取该请求的参数信息;根据参数信息从缓存中所存储的第一规则信息中获取第二规则信息;根据第二规则信息对请求进行校验。本技术实施例提供的数据处理方法,将数据库中的规则信息存储到缓存中。当收到请求时,可以通过调用缓存中的规则信息对请求进行校验,提高处理请求的效率。
63.下面将结合附图对本技术实施例所提供的数据处理方法进行介绍。
64.参见图3,图3为本技术实施例中一种数据处理方法的流程图。
65.该方法具体包括以下步骤:
66.s301:从数据库中获取第一规则信息,将第一规则信息存储到缓存中。
67.可以预先在数据库中配置第一规则信息,当系统启动时,获取数据库中所配置的第一规则信息,并将第一规则信息存储到缓存中。
68.在一种可能的实现方式中,实现该功能的程序实例如下:
69.@component
70.public class checkrulparamsbean{
71.......
72.}//创建类checkrulparamsbean,使用java注解@component声明其为bean,将其托管至spring框架管理,以达到系统启动时自动运行该程序的目的。
73.@postconstruct
74.public void init(){
75....查数据库中配置的规则表...
76....将规则信息存入缓存...
77.}//在类checkrulparamsbean中创建方法init(),并使用注解@postconstruct声明,其会在系统启动时执行且只执行一次,在init中查询数据库中的规则信息,并将规则信息存入缓存中。
78.在实现方法init(),一种可能的实现方式中,可以创建类ruldefentity用于存储从数据库中读取的第一规则信息。
79.其中,第一规则信息可以包括:规则标识号(identity document,id)、规则名称、方法路径、校验模式、校验字段以及启用状态。其中,规则标识号用于区分不同的规则信息,规则名称代表该规则的含义,方法路径可以定位需要后台验证的方法所对应的接口位置,校验模式主要包括:0-非空校验,1-参数的长度是否超过预设长度,2-参数的值是否在预设范围内,3-参数是否为控制,4-参数是否需要加密以及5-参数是否需要解密,校验字段是数据库中预先存储的需要进行参数校验的字段,启用状态包括1和0,启用状态为1表明该规则信息生效,启用状态为0表明该规则信息停用。如表1所示,表1为本技术实施例所提供的一
种规则信息的示例。
80.表1规则信息
[0081][0082]
将从数据库中获取的第一规则信息存储在缓存时,一种可能的实现方式为,在类ruldefentity中创建私有变量params作为存储第一规则信息的缓存。具体实现时,利用mabatis技术从数据库中查询到第一规则信息,然后将获取的第一规则信息中的每条规则信息依次存入缓存,其中,可以将第一规则信息以键值对key-value形式的数据结构存储存储在缓存中,键值对中的关键字key用于存储第一规则信息中的方法路径,值value用于存储第一规则信息。
[0083]
在一种可能的实现方式中,实现上述功能的程序实例如下:
[0084]
public class checkrulparams{
[0085]
private static map《string,ruldefentity》params=new hashmap《string,ruldefentity》();
[0086]
......
[0087]
}//以键值对形式存储第一规则信息。
[0088]
list《ruldefentity》ruldeflist=select规则标识号,规则名称,方法路径,校验模式,校验字段,启用状态from规则表where启用状态='1'
[0089]
//从规则表中获取生效的第一规则信息。
[0090]
for(ruldefentity ruldef:ruldeflist){
[0091]
string vluroute=ruldef.方法路径;//按照关键字方法路径进行查找。
[0092]
checkrulparams.setparams(vluroute,ruldef);//设置或更新该参数
[0093]
}
[0094]
如图4所示,图4为本技术实施例中一种规则信息存储到缓存的流程图。首先执行步骤s401,创建类,用于存储数据库中的第一规则信息;然后执行步骤s402,创建类的私有变量,用于存储第一规则信息至缓存,在创建类以及类的私有变量之后,执行步骤s403,查询数据库中的第一规则信息并将每条规则信息存入缓存。
[0095]
当数据库中的第一规则信息进行更新时,也需要更新存储到缓存中的第一规则信息。在一种可能的实现方式中,配置针对数据库的异步任务,该异步任务用于从数据库中获取第一规则信息,并将该第一规则信息存储到缓存。每间隔预设时间段执行一次该异步任务,即可将数据库中更新的第一规则信息定时存储到缓存中。
[0096]
利用异步任务定时从数据库查询数据并更新缓存,保证缓存中所存储的规则信息
的时效性。具体实现时,可以在数据库中配置一条调起查询数据库规则信息的异步任务,按照实际需求设置调起一次异步任务的间隔时间,例如,设置间隔时间为10分钟,则系统会每间隔10分钟定时查询数据库中配置的规则信息,并将规则信息更新存储到缓存。下面将对异步任务的调度设计进行介绍。
[0097]
使用异步框架的系统可以设置多条异步任务,本技术所涉及的异步任务只是其中一条。异步任务可以通过xml文件进行配置,也可以存储在数据库中,本技术实施例所提供的方案是将异步任务的调度规则写进数据库。通过servlet上下文监听器将调度任务集成到现有系统。
[0098]
当监听到web容器启动时,从数据库中读取配置好的多条异步任务,并转换成异步任务配置列表对象。遍历异步任务配置列表对象,根据配置的任务全限定类名,利用java反射技术实例化为任务对象,依据实例对象创建调度任务。然后再根据配置的调度规则创建调度触发器,将调度任务和调度规则加入到调度器。当所有任务都加入到调度器时,启动调度器,至此调度器初始化完成。
[0099]
当执行异步任务时,考虑到集群的情况,在同一个调度任务前使用注解为异步任务加锁,禁止并发执行多个异步任务,只有成功获取锁节点的调度线程才会执行异步任务,同一任务的其他节点的线程则阻塞等待,防止资源冲突。待该异步任务执行完毕后,释放数据库锁,等待下一次调度任务。
[0100]
s302:当接收到请求时,获取请求的参数信息。
[0101]
在一种可能的实现方式中,该请求的参数信息可以包括:类名、方法名以及请求参数。
[0102]
如果对各个请求的校验分散在不同的任务中进行,当不同任务的请求报文拥有相同的校验规则时,会导致校验代码冗余,且不易维护。
[0103]
基于此,本技术实施例提供一种统一规则校验入口,利用面向切面编程的方法拦截请求,所接收的请求均需要通过该统一的入口进入,起到拦截器的作用。即在某个方法或者字段被访问之前进行拦截,然后在之前或者之后加入某些指定的操作。其中,切面通常使用切点表达式来表示,指定了当前切面逻辑所要包裹的任务模块的范围大小,切点是指匹配所要织入的一个或者多个连接点,使用明确的类或者方法指定这些切点。
[0104]
在一种可能的实现方式中,实现上述功能的程序实例如下:
[0105]
定义类commoninterceptor,使用java注解@aspect声明其为切面类,拦截所有调用abstarctwsservice方法的请求:
[0106]
@component
[0107]
@aspect
[0108]
public class commoninterceptor{
[0109]
...实现规则校验...
[0110]
}
[0111]
在类commoninterceptor中定义方法around,使用java注解@around声明此方法为切面的切入点,所有请求在执行时都先进入around方法,然后在around方法中执行具体的规则判断方法:
[0112]
@around(...)
[0113]
public object around(proceedingjoinpoint jp)throws throwable{
[0114]
......
[0115]
}
[0116]
本实施例使用拦截器原理,在接收到请求后,拦截器中对请求报文进行统一的规则校验,避免了校验流程分布在各接口中,便于后续的维护和扩展,提升程序的可读性与可维护性。
[0117]
s303:根据请求的参数信息,从缓存的第一规则信息中获取第二规则信息。
[0118]
其中,第一规则信息包括第一方法路径,第二规则信息包括第二方法路径、校验字段以及校验模式。在一种可能的实现方式中,根据参数信息,从第一规则信息中获取与请求相匹配的第二规则信息时,首先将请求参数信息中的类名和方法名进行拼接,组成请求方法路径,然后将请求方法路径与第一方法路径相比较,从第一方法路径中找到与请求方法路径相匹配的第二方法路径,即可根据该第二方法路径获取包括该第二方法路径的第二规则信息。
[0119]
s304:根据第二规则信息对请求进行校验。
[0120]
当获取到与请求相匹配的第二规则信息时,根据第二规则信息对请求进行规则校验。一种可能的实现方式为,根据第二规则信息中的校验字段、校验模式以及参数信息中的请求参数,对请求进行校验。
[0121]
具体实现时,根据表1可知,规则信息中的校验字段可能包括有分隔符“|^”,所以当第二规则信息中的校验字段含有分隔符时,利用分隔符将原校验字段划分为多个字段,将划分的多个字段与请求参数相比较,从请求参数中获取与该多个字段中任一字段相匹配的目标请求参数。判断该目标请求参数所属的校验模式,根据该校验模式对请求进行规则校验。
[0122]
在一种可能的实现方式中,实现上述功能的程序实例如下:
[0123]
定义所得到的的第二规则信息为规则实体newparam,若其非空,取其校验字段,并使用分隔符“|^”将其分割,得到存储划分的多个字段的数组rule:
[0124]
if(newparam!=null){
[0125]
string[]rule=newparam.getvluhdlele().split(“|^”)
[0126]
//rule格式如[“numseqproc”,“numurmagra”]
[0127]
...进一步处理...
[0128]
}
[0129]
遍历数组rule中的单个字段ru,将在请求参数中与ru对应的目标请求参数,将其实例化得到val,可以通过val取到目标请求参数中具体报文的值:
[0130]
for(string ru:rule){
[0131]
object val=arg.getclass().getdeclaredfield(ru);
[0132]
......
[0133]
}
[0134]
根据val所属的校验模式,对所获得到具体报文的值进行规则判断。
[0135]
以非空判断为例:
[0136]
if(val==null){
[0137]
sb.append(",").append(field.getname());
[0138]
continue;//不向下执行判断,避免空指针异常
[0139]
}
[0140]
本技术实施例所提供的数据处理方法,将数据库中的规则信息存储到缓存中,当数据库中的规则信息进行更新时,可同步更新缓存中的规则信息。当收到请求时,可以通过调用缓存中的规则信息对请求进行校验,提高处理请求的效率。
[0141]
另外,针对不同的请求,利用拦截器原理提供统一的规则校验入口,提升了程序的可读性和可维护性。
[0142]
基于上述方法实施例,本技术实施例还提供一种数据处理装置。
[0143]
参见图5,图5为本技术实施例中一种数据处理装置的示意图。
[0144]
该装置500包括:存储模块501、第一获取模块502、第二获取模块503以及校验模块504;
[0145]
存储模块501,用于从数据库中获取第一规则信息,将第一规则信息存储到缓存中。
[0146]
第一获取模块502,用于当接收到请求时,获取请求的参数信息。
[0147]
第二获取模块503,用于根据参数信息,从缓存的第一规则信息中获取第二规则信息。
[0148]
校验模块504,用于根据第二规则信息对请求进行校验。
[0149]
在一种可能的实现方式中,第一规则信息包括:第一方法路径,请求的参数信息可以包括:类名、方法名以及请求参数;第二获取模块403,具体用于将参数信息中的类名与方法名组成请求方法路径,将请求方法路径与第一方法路径相比较,获取第二规则信息,其中,第二规则信息包括第二方法路径,第二方法路径与请求方法路径相匹配。
[0150]
在一种可能的实现方式中,第二规则信息包括校验字段以及校验模式;校验模块504,具体用于根据校验字段、校验模式以及请求参数,对请求进行校验。
[0151]
在一种可能的实现方式中,当校验字段中包括分隔符时,校验模块504,具体用于利用分隔符将校验字段划分为多个字段;将多个字段与请求参数相比较,从请求参数中获取与多个字段中任一字段相匹配的目标请求参数;根据目标请求参数所属的校验模式,对请求进行校验。
[0152]
存储模块501,具体用于配置针对数据库的异步任务,利用该异步任务从数据库中获取第一规则信息,并将第一规则信息存储到缓存中,其中,异步任务每间隔预设时间段执行一次。
[0153]
存储模块501,具体用于将第一规则信息以键值对的形式存储到缓存中,其中,键值对中的关键字用于存储第一方法路径,键值对中的值用于存储第一规则信息。
[0154]
基于上述方法实施例和装置实施例,本技术实施例还提供一种数据处理设备。
[0155]
参见图6,图6为本技术实施例中一种数据处理设备的示意图。
[0156]
该设备600包括:存储器601以及处理器602;
[0157]
存储器601用于存储相关的程序代码;
[0158]
处理器602用于调用所述程序代码,执行上述方法实施例所述的数据处理方法。
[0159]
此外,本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质
用于存储计算机程序,所述计算机程序用于执行上述方法实施例所述的数据处理方法。
[0160]
需要说明的是,本技术中使用的术语“第一”和“第二”是用于区别类似的对象,而不用于描述特定顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本技术的实施例中对相同属性的对象在描述时所采用的区分方式。
[0161]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本类似于方法实施例,所以描述得比较简单,相关部分参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元或模块可以是或者也可以不是物理上分开的,作为单元或模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上,可以根据实际需要选择其中的部分或者全部单元或模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0162]
以上所述仅是本技术示例性的实施方式,并非对本技术做任何形式上的限制。对以上实施例所做的等同变化或修改,均属于本技术的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1