一种记录用户操作的方法、装置、存储介质及计算机设备与流程

文档序号:19216826发布日期:2019-11-26 01:46阅读:163来源:国知局
一种记录用户操作的方法、装置、存储介质及计算机设备与流程

本发明涉及计算机、网络和数据库领域,尤其涉及一种记录用户操作的方法、装置、存储介质及计算机设备。



背景技术:

在企业数字化转型高速发展的时代,不断涌现出了各种各样的计算机、网络和数据库等信息系统,这些信息系统中的信息安全性是至关重要的。

在现有技术中,例如,对于网络系统而言,通常在网络系统的外部防火墙方面有各种策略保证安全,然而,在网络系统内部的账号权限内的操作几乎是不设防的,也没有很好的防御方式。即,现有技术的信息系统很少在业务层面针对内部网络的用户进行日志记录。

另外,现有技术的操作日志一般面向的是技术人员,而不是普通用户。因此,普通用户通常不能及时发现自己账号的异常操作(不经意的误操作或非本人操作)。即使普通用户能够发现异常,由于日志记录通常不是用自然语言描述的,因而也需要专业的技术人员去分析查找日志才能确定具体的异常操作信息。这种方式比较繁琐、效率低,还大大增加了沟通成本,使得普通用户不能独立、及时、直观地获取自己账号的相关操作信息。

例如,现有技术通常采用以下两种方法来记录用户操作日志:

1、在后端接口的实现方法中,将用于记录业务日志(即,用户操作日志)的代码和具体业务方法耦合在一起,并且随着一个事务提交。

2、利用aop的aspectj技术进行日志埋点,把调用目标方法的方法名和参数记录下来,供技术人员排查问题使用。

如果为了兼容开发量与系统性能,将业务日志和业务数据都存储在了mysql数据库里,那么上述两种方法分别具有以下缺点:

1、业务日志代码和业务方法代码耦合严重,随着用户数量增长和系统功能的增加,所需记录日志的范围扩大时,每个调用记录日志方法的源代码都需要修改,并且在性能瓶颈到来时,无法轻量级对业务日志进行迁移与扩展,势必会拖累系统整体的运行效率;其次,业务日志代码和业务方法在一个事务里面,一起提交成功或失败,对于操作失败的情况,事务进行回滚,导致不能记录下来,存在一定的安全隐患。

2、传统业务日志的目标受众是懂技术的开发人员,普通用户并不能看懂这些系统日志,记录日志的主要目的是方便进行问题排查。普通注解方式只能描述固定信息,不能根据传入参数的改变而更改描述信息,当用户账号有异常操作或进行误操作时,普通注解本身不能清楚地描述和定位问题,从而容易忽视问题,造成连锁反应。

另外,在问题暴露之前,单从记录的业务日志来看,并不能及时得到有效的反馈信息;并且当系统运行一段时间之后,各种业务日志会掺杂在一起,用户也很难从海量的日志中寻找到需要的信息。

因此,为了解决上述问题,需要提出新的技术方案。



技术实现要素:

根据本发明的记录用户操作的方法,包括:

从用户操作所对应的目标方法的注解中获取关于用户操作的注解信息;

从目标方法的入参中获取关于用户操作的非注解信息;

记录注解信息和非注解信息,

其中,注解信息包括用户操作所执行的具体功能的文字说明信息、用户操作所涉及的操作对象的文字说明信息和占位信息,非注解信息包括用于替换占位信息的操作对象的具体信息。

根据本发明的记录用户操作的方法,还包括:

基于日志监控策略分析注解信息和非注解信息,确定告警信息;

记录注解信息、非注解信息和告警信息;

将注解信息、非注解信息和告警信息通知给用户。

根据本发明的记录用户操作的方法,以异步方式执行目标方法和执行记录注解信息和非注解信息的步骤。

根据本发明的记录用户操作的方法,从用户操作所对应的目标方法的注解中获取关于用户操作的注解信息的步骤包括:

使用自定义的拦截器实例来获取目标方法和目标方法的注解。

根据本发明的记录用户操作的方法,从目标方法的入参中获取关于用户操作的非注解信息的步骤包括:

使用自定义的拦截器实例来获取目标方法;

使用自定义的动态代理实例来执行目标方法,获取非注解信息。

根据本发明的记录用户操作的方法,记录注解信息和非注解信息的步骤包括:

在自定义的动态代理实例中调用自定义的业务日志异步处理实例来异步记录注解信息和非注解信息。

根据本发明的记录用户操作的装置,包括:

第一信息获取模块,用于从用户操作所对应的目标方法的注解中获取关于用户操作的注解信息;

第二信息获取模块,用于从目标方法的入参中获取关于用户操作的非注解信息;

第一信息记录模块,用于记录注解信息和非注解信息,

其中,注解信息包括用户操作所执行的具体功能的文字说明信息、用户操作所涉及的操作对象的文字说明信息和占位信息,非注解信息包括用于替换占位信息的操作对象的具体信息。

根据本发明的记录用户操作的装置,还包括:

第三信息获取模块,用于基于日志监控策略分析注解信息和非注解信息,确定告警信息;

第二信息记录模块,用于记录注解信息、非注解信息和告警信息;

告警模块,用于将注解信息、非注解信息和告警信息通知给用户。

根据本发明的记录用户操作的装置,还包括:

异步执行模块,用于以异步方式执行目标方法和执行记录注解信息和非注解信息的步骤。

根据本发明的记录用户操作的装置,其第一信息获取模块还用于:

使用自定义的拦截器实例来获取目标方法和目标方法的注解。

根据本发明的记录用户操作的装置,其第二信息获取模块还用于:

使用自定义的拦截器实例来获取目标方法;

使用自定义的动态代理实例来执行目标方法,获取非注解信息。

根据本发明的记录用户操作的装置,其第一信息记录模块还用于:

在自定义的动态代理实例中调用自定义的业务日志异步处理实例来异步记录注解信息和非注解信息。

根据本发明的计算机可读存储介质,存储介质上存储有计算机程序,程序被处理器执行时实现上文所述方法的步骤。

根据本发明的计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上文所述方法的步骤。

根据本发明的上述技术方案,提供了能够同时记录用户的注解信息和非注解信息的更加灵活的记录方式。

附图说明

并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与相关的文字描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。

图1示例性地示出了根据本发明的记录用户操作的方法的示意流程图。

图2示例性地示出了根据本发明的记录用户操作的装置的示意框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

图1示例性地示出了根据本发明的记录用户操作的方法的示意流程图。

如图1的实线框所示,根据本发明的记录用户操作的方法,包括:

步骤s102:从用户操作所对应的目标方法的注解中获取关于用户操作的注解信息;

步骤s104:从目标方法的入参中获取关于用户操作的非注解信息;

步骤s106:记录注解信息和非注解信息,

其中,注解信息包括用户操作所执行的具体功能的文字说明信息、用户操作所涉及的操作对象的文字说明信息和占位信息,非注解信息包括用于替换占位信息的操作对象的具体信息。

例如,以执行添加用户操作的useradd[-dhome]username命令为例,其注解信息可以包括用户操作所执行的具体功能的文字说明信息(例如,增加用户)、用户操作所涉及的操作对象的文字说明信息和占位信息(用户根目录为{home}、用户名为{username});非注解信息可以包括用于替换占位信息{home}、{username}的操作对象的具体信息(例如,home为“/小林”、username为“小林”等)。即,可以使用操作对象的具体信息来替换注解中的占位信息{home}、{username},形成最终的记录信息“增加用户用户根目录为/小林用户名为小林”。

例如,上述用户操作包括用户通过前端提交的、在后端执行的数据库操作。即,用户所操作的系统可以是采用前后端分离的方式实现的网络系统,后端接口遵循restful风格,用户每一个操作都对应后端的一个具体接口(方法)。

例如,可以使用自定义注解的方式在用户操作所对应的目标方法添加注解。例如,增加的自定义注解的名称为@interfaceactionlog;作用域配置为方法级别;作用时段配置为运行时;属性定义为“描述字段message”。

其中,上述注解是现有技术中的一种标注在程序代码的说明,可以在类、方法、字段、方法参数等的前面标注。

可选地,如图1的虚线框所示,根据本发明的记录用户操作的方法,还包括:

步骤s108:基于日志监控策略分析注解信息和非注解信息,确定告警信息;

步骤s110:记录注解信息、非注解信息和告警信息;

步骤s112:将注解信息、非注解信息和告警信息通知给用户。

可选地,可以在不影响用户体验的前提下,针对上述注解信息、非注解信息执行日志监控策略,以产生相应的告警信息(即,告警标签),从而为日志打上各等级健康状况的标签,有利于保障系统的安全性和稳定性。

例如,可以自定义日志安全策略处理类,并在其中通过以下步骤添加和执行日志监控策略:

1、增加模块-调用状态-阈值-日志告警级别的关系映射,根据需要设定全局或局部模块的相对时间段内调用频率策略。

2、增加策略处理方法,参数为日志实体,通过判断日志所属模块映射策略,对此模块方法设定的正常调用频率、允许失败次数等策略的阈值进行判断,如果在设定的相对时间段内的调用次数超出阈值,则为此业务日志打上相应的“低”、“中”、“高”等告警标签,否则标为“正常”;比如设定登陆模块30分钟内登陆失败阈值为10次,告警级别为“高-爆破登陆”,当同一个账号出现登陆失败超出阈值的情况,就在超出阈值的日志打上“高-爆破登陆”级告警标签。

例如,可以(对日志判断处理后)根据告警信息中的日志告警级别,使用站内信、邮件等方式将(例如,对应于上述具有“高-爆破登陆”级告警标签的)注解信息、非注解信息和告警信息通知用户。

可选地,以异步方式执行目标方法和执行记录注解信息和非注解信息的步骤。

其中,异步方式是一种可以无需等待被调用函数的返回值就让操作(即,目标方法)继续进行的已有机制。

例如,可以基于excutor框架来实现异步方式。excutor框架是一个执行策略调用、调度、执行和控制的异步任务的框架,可以用来控制线程的启动、执行和关闭。

1、excutor框架中定义了callable接口。callable接口使用泛型去定义它的返回类型。

2、excutor框架中定义了executors类。executors类提供了用于在线程池中执行callable内的任务的方法。

3、excutor框架中定义了future类。在线程池提交callable任务后会返回一个future对象,使用它可以知道callable任务的状态,并且得到callable返回的执行结果。future提供了get方法,可以等待callable结束并获取它的执行结果。

4、excutor框架中定义了executorservice类。在executorservice类中提供了重载的submit方法,该方法既可以接收runnable实例又能接收callable实例。对于实现callable接口的类,需要覆写call方法,并且只能通过executorservice的submit方法来启动call方法。

例如,可以基于excutor框架,采用以下具体开发步骤来实现异步方式:

1、使用excutor线程池节省系统资源。

2、继承callable接口,重载call方法。

3、可以在call方法中执行保存业务日志方法;可以在保存业务日志(即,上述步骤s110)之前,调用日志安全策略处理方法(即,上述步骤s108),标记日志的安全级别;之后还可以进行持久化(即,将日志信息存入数据库)。

4、增加普通方法,从线程池中取出空闲线程,通过使用executorservice的submit方法传入异步任务来调用异步保存业务日志方法,并用future接收返回结果,调用完成后回收线程。

根据本发明的上述方法,可以采用异步方式记录业务日志,加快了反应速度。

可选地,可以使用自然语言描述业务日志,让用户参与成为日志的监督者,方便用户识别异常操作,提升业务日志的完整性与安全性。

可选地,步骤s102包括:

使用自定义的拦截器实例来获取目标方法和目标方法的注解。

其中,上述拦截器是现有技术中作用于客户端请求和后端处理类(或实例)之间,可以在请求方法到达后端之前进行拦截的一种对象(类或实例)。

例如,上述拦截器类或实例在指定范围内拦截所有经过后端的接口调用(即,目标方法),并判断目标方法是否标注了自定义注解,如果标注了则为目标方法,拦截做下一步处理(例如,执行目标方法,获取非注解信息,记录信息等)。

可选地,步骤s104包括:

使用自定义的拦截器实例来获取目标方法;

使用自定义的动态代理实例来执行目标方法,获取非注解信息。

例如,上述自定义的动态代理可以使用cglib动态代理来实现。

cglib动态代理在运行期为(包含上述目标方法的)目标类产生一个代理类,代理类将目标类作为自己的父类并为其中的非final委托方法创建两个方法:一个是与委托方法签名相同的方法,在它被调用时会通过super调用委托方法;另一个是代理类独有的(cglib拦截器内部的拦截)方法,在进行动态代理时,会判断是否存在实现了methodinterceptor接口的对象,若存在则将调用intercept方法对委托方法进行代理,通过拦截目标类的所有方法交由代理类来执行,可以在调用目标方法之前或之后做一些额外操作(例如,获取上述非注解信息)。

即,可以使用cglib动态代理来实现以下步骤:methodinterceptor接口;重载intercept方法;增加获取代理类实例方法;通过代理实例来执行目标方法(即,cglib拦截器拦截到的目标方法交给动态代理类进行代理)。

例如,可以在intercept方法中调用目标方法前后,进行如下操作,以获取上述非注解信息:

1、在目标方法执行前:获取目标方法的所有入参,并获取使用了actionlog自定义注解中描述字段message的值,用正则表达式\{[^}]*\}匹配出message中所有使用了{field}占位的地方,比如:“{username}在{department}中新增了人员,名字叫{userbean.name}”,此方法处理时会匹配出{username}{department}{userbean.name}三个变量占位符,前两个变量不含嵌套属性,通过解析入参的属性映射可以得到具体的值,第三个变量包含嵌套属性,需要解析入参的属性后把入参对象转为json格式,再调用开源工具类jsonpath解析出映射的值。最终效果可能为“小明在技术部门中新增了人员,名字叫小林”,这样通俗易懂的语言,并且这些模板都是能够自定义组合的。

2、在目标方法执行后:保存业务日志;在使用try、catch、finally的方式,在try代码块中执行上述操作,在finally块调用业务日志异步处理类保存业务日志,确保目标方法的每一次调用都会被记录下来。

根据本发明的上述方法,可以采用注解方式,灵活控制记录业务日志的范围。可以利用动态代理技术,在目标方法调用前提取所需参数,在调用后记录调用结果,能保证业务日志的完整性,不随着操作失败而丢失这部分操作日志。

可选地,还可以在日志处理方面抽取出独立模块,统一管理。在扩展性和业务日志数据迁移方面有着天然优势。

可选地,业务日志的主体描述信息可以自定义模板,用自然语言结合参数解析形成便于用户理解的日志信息,让用户通过查看自己账号的操作记录,能够自主排查、处理一些常见问题,再者能够更精确地反馈问题,节省软件提供商的技术支持成本。

可选地,步骤s106包括:

在自定义的动态代理实例中调用自定义的业务日志异步处理实例来异步记录注解信息和非注解信息。

图2示例性地示出了根据本发明的记录用户操作的装置200的示意框图。

如图2的实线框所示,根据本发明的记录用户操作的装置200,包括:

第一信息获取模块201,用于从用户操作所对应的目标方法的注解中获取关于用户操作的注解信息;

第二信息获取模块203,用于从目标方法的入参中获取关于用户操作的非注解信息;

第一信息记录模块205,用于记录注解信息和非注解信息,

其中,注解信息包括用户操作所执行的具体功能的文字说明信息、用户操作所涉及的操作对象的文字说明信息和占位信息,非注解信息包括用于替换占位信息的操作对象的具体信息。

可选地,如图2的虚线框所示,记录用户操作的装置200还包括:

第三信息获取模块207,用于基于日志监控策略分析注解信息和非注解信息,确定告警信息;

第二信息记录模块209,用于记录注解信息、非注解信息和告警信息;

告警模块211,用于将注解信息、非注解信息和告警信息通知给用户。

可选地,如图2的虚线框所示,记录用户操作的装置200还包括:

异步执行模块213,用于以异步方式执行目标方法和执行记录注解信息和非注解信息的步骤。

可选地,第一信息获取模块201还用于:

使用自定义的拦截器实例来获取目标方法和目标方法的注解。

可选地,第二信息获取模块203还用于:

使用自定义的拦截器实例来获取目标方法;

使用自定义的动态代理实例来执行目标方法,获取非注解信息。

可选地,第一信息记录模块205还用于:

在自定义的动态代理实例中调用自定义的业务日志异步处理实例来异步记录注解信息和非注解信息。

基于根据本发明的上述方法和装置,还提出了一种计算机可读存储介质,存储介质上存储有计算机程序,程序被处理器执行时实现上文所述方法的步骤。

基于根据本发明的上述方法和装置,还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上文所述方法的步骤。

根据本发明的上述技术方案,提供了能够同时记录用户的注解信息和非注解信息的更加灵活的记录方式。

根据本发明的上述技术方案,还具有以下优点:

1、能够通过动态代理+自定义注解的方式来实现详细记录用户对具体数据的操作日志。实现了普通用户也能通过查看操作记录,对用户操作(例如,用户账号操作)行为进行监控,利于加强账号安全意识。一方面,用户能够追踪自己账号都对哪些数据进行了操作,如果有误操作的情况也能及时发现。另一方面,也能在非本人操作账号的情况下,对账号行为进行溯源。

2、当旧系统进行升级、需要增加关于新的用户操作的业务日志记录时,避免了大量修改原有代码,减少了调试时间。

3、使用注解方式代替了在业务执行方法中执行写日志操作的传统日志记录方式。可以将描述信息(即,记录信息)随着传入参数细化成自然语言,增加了可读性。可以将日志模块从具体业务中分离出来,相对于现有技术而言,日志的粗细粒度具有伸缩性,后期随需求变化改动成本大大降低,有利于软件系统版本迭代的良性循环。

4、可以在业务层面保证操作日志的完整性,进而提升系统的健壮性。除了可以记录正常用户操作的情况之外,还可以有效地记录诸如暴力破解账号密码等频繁尝试入侵的情况、越权操作等异常用户操作行为。还可以针对这些日志记录制定对应的策略,从而保证系统安全。

5、可以将业务日志的目标受众从技术人员转移到用户,让用户切实参与到业务日志中,有利于提高用户的账号安全意识,每次操作都有迹可循,加强了数据的可回溯性。还可以通过查看业务日志自主判断数据的合法性,避免误操作后不能及时定位问题。

6、可以使用异步方式保存业务日志,使核心业务逻辑无需等待日志逻辑执行完毕,日志记录的逻辑异步执行还可以将日志缓存到buffer,批量写入数据库,通过使用异步,能够使软件系统表现出更好的性能,并在异步任务中进行一些日志安全策略处理,增强系统的健壮性,改善用户体验。

7、在不入侵原有业务方法的情况下,采用高内聚,低耦合的模式记录业务日志,用自然语言描述业务日志,让用户参与成为日志的监督者;并且采用异步方式记录业务日志,通过策略为日志打上告警标签,帮助用户识别异常操作,提升业务日志的完整性与安全性。

上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1