一种基于nifi接口的web组件token定时更新实现方法及系统
技术领域
1.本发明公开一种基于nifi接口的web组件token定时更新实现方法及系统,涉及计算机技术领域。
背景技术:2.apache nifi是一个易于使用、功能强大而且可靠的数据处理和分发系统。apache nifi是为数据流设计,它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。简单地说,nifi是为自动化系统之间的数据流而生。这里的数据流表示系统之间的自动化和受管理的信息流。基于web图形界面,通过拖拽、连接、配置完成基于流程的编程,实现数据采集、处理等功能。
3.nifi的基本设计理念是基于数据流的编程flow
‑
based programming(fbp)。应用是由处理器黑盒、连接器组成的网络。数据进入一个节点,由该节点对数据进行处理,根据不同的处理结果将数据路由到后续的其他节点进行处理。
4.目前web组件的接口调用,如果是接口无验证的调用,可以直接在组件中填入对应的接口所需要的信息即可获取返回参数,如果需要token的验证,存在token过期的情况,无法定时更新,故发明一种基于nifi接口的web组件token定时更新实现方法及系统,以解决上述问题。
技术实现要素:5.本发明针对现有技术的问题,提供一种基于nifi接口的web组件token定时更新实现方法及系统,所采用的技术方案为:一种基于nifi接口的web组件token定时更新实现方法,所述的方法具体步骤包括:
6.s1设置controller service的参数定义配置;
7.s2判断是否需要更新缓存;
8.s3根据nifi从上下文processcontext直接获取statemanager,根据该接口中的getstate方法获取到对应的key/value形式的map数据,根据对应的token的key获取到token。
9.所述s1设置controller service的参数定义配置的具体步骤包括:
10.s101新建nifi的controller service接口定义;
11.s102获取token接口的请求头信息、请求体信息和过期时间参数。
12.所述s2判断是否需要更新缓存的步骤包括
13.s201比较系统当前事件与上次初始化时间加过期时间之和的大小关系;
14.s202大于,则获取最新的token,并存入缓存中;
15.s212小于,则从接口中获取token,并存入缓存中。
16.所述s202大于,则获取最新的token,并存入缓存中的具体步骤包括:
17.s2021调用获取token的接口,将更新后的token更新到缓存中;
18.s2022记录并更新当前系统的时间至最新初始化token的时间点。
19.一种基于nifi接口的web组件token定时更新实现系统,所述的系统具体包括参数设置模块、更新判断模块和数据更新模块:
20.参数设置模块:设置controller service的参数定义配置;
21.更新判断模块:判断是否需要更新缓存;
22.数据更新模块:根据nifi从上下文processcontext直接获取statemanager,根据该接口中的getstate方法获取到对应的key/value形式的map数据,根据对应的token的key获取到token。
23.所述参数设置模块具体包括接口创建模块和信息获取模块:
24.接口创建模块:新建nifi的controller service接口定义;
25.信息获取模块:获取token接口的请求头信息、请求体信息和过期时间参数。
26.所述更新判断模块具体包括比较模块、缓存模块a和缓存模块b:
27.比较模块:比较系统当前事件与上次初始化时间加过期时间之和的大小关系;
28.缓存模块a:大于,则获取最新的token,并存入缓存中;
29.缓存模块b:小于,则从接口中获取token,并存入缓存中。
30.所述缓存模块a具体包括缓存更新模块和更新记录模块:
31.缓存更新模块:调用获取token的接口,将更新后的token更新到缓存中;
32.更新记录模块:记录并更新当前系统的时间至最新初始化token的时间点。
33.本发明的有益效果为:目前web组件的接口调用,如果是接口无验证的调用,可以直接在组件中填入对应的接口所需要的信息即可获取返回参数,如果需要token的验证,存在token过期的情况,无法定时更新,本发明方法在外包裹一层接口,先请求token接口再将对应的参数放入,增加接口开发的成本,为方便组件使用,撇去获取token的步骤,遂将获取token步骤整合到web组件中,减少开发成本,提高用户体验。
附图说明
34.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
35.图1是本发明方法的流程图;图2是本发明系统的结构示意图。
具体实施方式
36.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
37.实施例一:
38.一种基于nifi接口的web组件token定时更新实现方法,所述的方法具体步骤包括:
39.s1设置controller service的参数定义配置;
40.s2判断是否需要更新缓存;
41.s3根据nifi从上下文processcontext直接获取statemanager,根据该接口中的getstate方法获取到对应的key/value形式的map数据,根据对应的token的key获取到token;
42.进一步的,所述s1设置controller service的参数定义配置的具体步骤包括:
43.s101新建nifi的controller service接口定义;
44.s102获取token接口的请求头信息、请求体信息和过期时间参数;
45.首先按照s1设置controller service的参数定义配置,为实现将token定时更新,需要新建实现nifi的controller service,在该控制服务设计中,用户需要配置获取token的必要参数,如获取token接口的url接口的请求头信息,接口的请求体信息,以及token的过期时间expire_time四个参数,如过想控制是否需要更新,可新增是否更新参数,因业务场景而定;1
46.以下是新实现的controller service的接口定义:
47.48.[0049][0050]
以上为在指定的web调用组件中引用新的controller service;
[0051]
进一步的,所述s2判断是否需要更新缓存的步骤包括:
[0052]
s201比较系统当前事件与上次初始化时间加过期时间之和的大小关系;
[0053]
s202大于,则获取最新的token,并存入缓存中;
[0054]
s212小于,则从接口中获取token,并存入缓存中;
[0055]
进一步的,所述s202大于,则获取最新的token,并存入缓存中的具体步骤包括:
[0056]
s2021调用获取token的接口,将更新后的token更新到缓存中;
[0057]
s2022记录并更新当前系统的时间至最新初始化token的时间点。
[0058]
配置成功后,用户初次启动组件,则在标注@onscheduled方法(被标注的方法将在被ontrigger调用之前调用,并且每次计划运行处理器或报告任务时都会被调用一次)中初始化调用获取token的方法,在调用token的方法之前,首先从nifi的statemanager接口中查看是否已经存在token,如果不存在token,则直接初始化调用获取token的接口至nifi的缓存中,可设置为本地缓存,避免因节点时间之间的偏差影响判断token是否已经过期的结果;
[0059]
如果存在token,就将其中的token取出,通过和上次记录的最新token更新的系统时间进行比较,用来比较是否需要获取最新的token。判断的方式如下:
[0060]
1.如果系统时间小于用户定义的过期时间expire_time和上次初始化token的时间之和,则直接从缓存中获取对应的token值;
[0061]
2.如果系统时间大于过期时间expire_time和上次初始化token的时间,则调用获取token的接口,将更新后的token更新到缓存中,同时需要记录并更新当前系统的时间至最新初始化token的时间点,该时间点的保存,可以像存token一样存到缓存中,当然也可以自定义一个内置变量来保存该时间点,如果采用的是变量形式的,则需要保证该变量在并发情况下的安全及可靠性,获取对应的token后就,将更新后的token存入缓存中,可以根据利用nifi中的statemanager中的setstate(map<string,string>state,scope scope)方法将token存入缓存的接口中,其中参数state中的key自定义设定,value存放最新的token值,例如,新建一map对象,假如设定的key是authorization,则用map.put(“authorization”,”token”)初始化参数,当然,如果有需要也可以存入其他所需要的参数,statemanage.setstate(map,scope.local),当初始化完成之后,流程进入ontrigger(processcontext context,processsession session)方法,用于后续的流程使用;
[0062]
[0063]
[0064]
[0065][0066]
在需要使用token的时候,可根据例如nifi可从的上下文processcontext直接获取statemanager,根据该接口中的getstate(scope scope)方法获取到对应的key/value形式的map数据,根据对应的token的key获取到token。例如已本地缓存的形式存入的token,context.getstatemanager()获取statemanager,然后用statemanager.getstate(scope.local)获取对应的key/value值的map,假如自定义的key是authorization,则根据map.get(authorization)获取对应的token值,以方便使用。
[0067]
实施例二:
[0068]
一种基于nifi接口的web组件token定时更新实现系统,所述的系统具体包括参数设置模块、更新判断模块和数据更新模块:
[0069]
参数设置模块:设置controller service的参数定义配置;
[0070]
更新判断模块:判断是否需要更新缓存;
[0071]
数据更新模块:根据nifi从上下文processcontext直接获取statemanager,根据该接口中的getstate方法获取到对应的key/value形式的map数据,根据对应的token的key获取到token;
[0072]
进一步的,所述参数设置模块具体包括接口创建模块和信息获取模块:
[0073]
接口创建模块:新建nifi的controller service接口定义;
[0074]
信息获取模块:获取token接口的请求头信息、请求体信息和过期时间参数;
[0075]
进一步的,所述更新判断模块具体包括比较模块、缓存模块a和缓存模块b:
[0076]
比较模块:比较系统当前事件与上次初始化时间加过期时间之和的大小关系;
[0077]
缓存模块a:大于,则获取最新的token,并存入缓存中;
[0078]
缓存模块b:小于,则从接口中获取token,并存入缓存中;
[0079]
进一步的,所述缓存模块a具体包括缓存更新模块和更新记录模块:
[0080]
缓存更新模块:调用获取token的接口,将更新后的token更新到缓存中;
[0081]
更新记录模块:记录并更新当前系统的时间至最新初始化token的时间点。
[0082]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。