基于redis防止接口重复请求的方法技术

技术编号:20329303 阅读:28 留言:0更新日期:2019-02-13 05:51
本发明专利技术提出一种基于redis防止接口重复请求的方法,涉及防止接口重复请求领域。本发明专利技术解决了目前防止接口重复请求的方法不适用于分布式部署的应用,不能保证线程安全问题。其技术方案要点为:首先,用户通过前端向服务器请求bid;其次,服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;然后,当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交;最后,服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果,若删除成功,则执行业务接口请求,若删除失败,则拒绝执行业务接口请求。

【技术实现步骤摘要】
基于redis防止接口重复请求的方法
本专利技术涉及计算机网络安全领域,特别涉及如何基于redis数据库防止接口重复请求的领域。
技术介绍
一个网络系统的正常运行通常是包括了前端界面、后台接口以及数据交互3大部分,由于信息处理的业务逐渐增多,对于请求处理的业务逻辑越来越复杂,对应事务处理时间也自然加长。在一个系统使用过程当中若用户已经提交了请求,在该请求还没处理完成的时候再次点击提交,结果自然是会提交一次冗余的数据。一旦存在恶意攻击系统的用户,有意的多次提交,从而达到疯狂注入的目的,可能会造成请求处理缓慢,无法提供服务,严重时将会威胁到整个系统的正常使用。因此在实际系统的使用中必须完成对某些特定提交数据的接口进行重复提交的判断和处理。目前处理重复提交的操作大多是从前端界面进行限制,即提交按钮点击一次后便将按钮设置为不可点击状态,从而限制请求重复提交。然而绕过前端对接口进行访问又十分容易,因此只依赖前端进行限制已经完全不能满足系统的安全要求,需要后端同样进行控制,在这种情况下就需要从接口层面对请求进行控制。已有的方法主要包括使用全局唯一标识,就是根据业务的操作和内容生成一个全局标识,在执行操作前先根据这个全局唯一标识是否存在,来判断这个操作是否已经执行,这种方式的特点是需要根据业务操作和内容来生成全局标识。另一种方式是使用验证码来防止重复请求,进入发布页面时,在后台生成验证码放入缓存,在点击提交时将此验证码一并提交到服务端,服务端先去缓存中查找是否有此验证码,如有则执行接口请求,没有则直接拒绝这个发布请求。但是这样的技术方案也存在部分缺陷,设计发展还不太成熟,设计方式过于广泛不具备针对性,且并不适用于分布式部署的应用,在多节点同时接收请求的情况下,可能会出现这种情况,两个相同的请求同时到达节点1和节点2,节点1查询不存在全局标识,然后还没有将全局标识写入缓存,此时节点2也不能查询到全局标识,此时这个请求在节点1和2都会得到执行,所以其并不能保证线程安全问题。
技术实现思路
本专利技术的目的是提供一种基于redis防止接口重复请求的方法,解决防止接口重复请求的方法不适用于分布式部署的应用,不能保证线程安全问题。本专利技术解决其技术问题,采用的技术方案是:基于redis防止接口重复请求的方法,包括如下步骤:步骤1、用户通过前端向服务器请求bid;步骤2、服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;步骤3、当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交;步骤4、服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果;步骤5、若删除成功,则执行业务接口请求,若删除失败,则拒绝执行业务接口请求。具体地,步骤2中,将重复验证前缀和该bid拼接后存入redis数据库时,设置bid过期时间,当超过该过期时间而不对bid数据进行操作,则自动删除存入的数据。进一步地,步骤4中,当服务器端接收到该请求时,根据配置信息验证这个请求是否需要进行重复提交的验证,如果需要,则通过一个拦截器,提取该bid。本专利技术的有益效果是,通过上述基于redis防止接口重复请求的方法,能快速高效的对重复提交的接口请求进行判断并避免数据的重复提交,提高网站的安全性能,同时能够解决分布式问题,避免并发操作下产生的线程安全问题。具体实施方式下面结合实施例,详细描述本专利技术的技术方案。本专利技术所述基于redis防止接口重复请求的方法,由如下步骤组成:首先,用户通过前端向服务器请求bid;其次,服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;然后,当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交;最后,服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果,若删除成功,则执行业务接口请求,若删除失败,则拒绝执行业务接口请求。实施例本专利技术实施例基于redis防止接口重复请求的方法,包括如下步骤:步骤1、用户通过前端向服务器请求bid。步骤2、服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;将重复验证前缀和该bid拼接后存入redis数据库时,设置bid过期时间,当超过该过期时间而不对bid数据进行操作,则自动删除存入的数据。步骤3、当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交。步骤4、服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果。当服务器端接收到该请求时,根据配置信息验证这个请求是否需要进行重复提交的验证,如果需要,则通过一个拦截器,提取该bid。步骤5、若删除成功,则执行业务接口请求,若删除失败,则拒绝执行业务接口请求。实际应用时,各个名词解释如下:事务标识bid:与请求数据对应识别码,用来判断某一个接口是否重复提交,本文简写为bid。bid过期时间:bid在redis数据库中的保存时间,即超过这个时间bid还存在于redis数据库中,会自动删除。重复验证前缀:一个字符串,添加到bid前面,组成验证接口是否重复请求,将其作为key保存在redis数据库中,由于redis数据库中没有表的概念,所以使用各种前缀来区分不同的数据类别。对于不能进行重复请求的接口,设计思路是先从服务器端获取一个bid,服务器端返回bid同时将重复验证前缀和这个bid拼接后存入redis数据库,并设置bid过期时间。若不对bid数据进行操作,过段时间会自动执行删除操作,避免内存占用。当请求业务接口时,将这个bid拼接在url里面作为一个参数一起提交上去,后端接收到请求时,提取出这个bid,拼接上重复验证前缀组成key,并且使用语句删除该条key对应的值,获取到redis数据库执行删除返回结果。如果返回结果为删除成功,说明在这次请求之前,redis数据库中该bid对应的数据还没有被删除,因此还没有其他接口执行过这个bid对应的事务,所以本次请求是第一次请求而不是重复发起的请求,可以继续执行接口逻辑;如果返回结果为删除失败,则说明在本次请求之前,已经有其它请求执行过bid对应的事务了,因为只有其它请求执行了才会删除redis数据库中对应的bid的数据,则拒绝执行接口内容,从而达到了保证接口只执行一次的目的。下面描述一下为什么本申请会采用通过删除数据的方式来判断接口请求是否已经被执行,传统的方法是先去查询缓存里面是否有记录来判断是否已经执行,如果不存在则说明还未执行,然后插入一条数据进去防止其他接口执行,然后执行业务逻辑,这样设计有一个问题就是,高并发下可能不会很好地工作。因为上述操作涉及到两个动作,先查询,再插入。很可能在查询和插入之间会进行线程执行的切换,即线程1查询不存在记录还未写入本文档来自技高网
...

【技术保护点】
1.基于redis防止接口重复请求的方法,其特征在于,包括如下步骤:步骤1、用户通过前端向服务器请求bid;步骤2、服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;步骤3、当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交;步骤4、服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果;步骤5、若删除成功,则执行业务接口请求,若删除失败,则拒绝执行业务接口请求。

【技术特征摘要】
1.基于redis防止接口重复请求的方法,其特征在于,包括如下步骤:步骤1、用户通过前端向服务器请求bid;步骤2、服务器端接收到的请求bid后,生成bid并将其返会给前端,同时将重复验证前缀和该bid拼接后存入redis数据库;步骤3、当用户在前端请求业务接口时,将该bid拼接在url里面作为一个参数一起向服务器端提交;步骤4、服务器端接收到该请求时,提取出该bid,并将其拼接上重复验证前缀组成key,并且使用语句在redis数据库中删除该key对应的值,然后向前端返回删除结果;步骤5、...

【专利技术属性】
技术研发人员:杨雪梅陈熙漆尧唐军
申请(专利权)人:四川长虹电器股份有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1