CN109144625B - 防重复提交方法、装置和系统 - Google Patents
防重复提交方法、装置和系统 Download PDFInfo
- Publication number
- CN109144625B CN109144625B CN201710512169.9A CN201710512169A CN109144625B CN 109144625 B CN109144625 B CN 109144625B CN 201710512169 A CN201710512169 A CN 201710512169A CN 109144625 B CN109144625 B CN 109144625B
- Authority
- CN
- China
- Prior art keywords
- target object
- token
- request
- session control
- control file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种防重复提交方法、装置和系统,其中,方法包括:通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种防重复提交方法、装置和系统。
背景技术
防重复提交,是用于防止页面重复提交的一种机制,在涉及业务交易的页面中较为常用,例如转账交易,以避免多次重复提交转账请求,导致重复转账。
现有技术中,采用标签技术防止重复提交。举例来说,在用户需要提交的表单中,加入<s:token>标签。当浏览器首次访问带有这个标签的页面时,服务端生成一个令牌(token),并提供给浏览器,以便浏览器提交表单的时候一并提交给服务端。服务端根据是否存储有这个token判断表单是否首次提交。
但由于现有技术中,必须基于标签库(taglib)技术加入<s:token>标签,因此,仅适用于JAVA服务端页面,即JSP页面,适用范围受限,无法应用于互联网领域广泛应用的轻量级超级文本标记语言(HyperText Markup Language,HTML)页面。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的第一个目的在于提出一种防重复提交方法,以扩大防重复提交的应用范围,使得包括HTML在内的页面均能够实现防重复提交。
本发明的第二个目的在于提出一种防重复提交装置。
本发明的第三个目的在于提出一种防重复提交系统。
本发明的第四个目的在于提出一种计算机设备。
本发明的第五个目的在于提出一种非临时性计算机可读存储介质。
本发明的第六个目的在于提出一种计算机程序产品。
为达上述目的,本发明第一方面实施例提出了一种防重复提交方法,包括:
接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成所述目标对象的令牌,并在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
向所述客户端发送所述令牌;
当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
可选地,作为一种可能的实现方式,所述根据所述目标对象的标识,在所述会话控制文件中查询之后,还包括:
若所述第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
可选地,作为一种可能的实现方式,所述确认所述目标对象为首次提交之后,还包括:
若所述第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识。
可选地,作为一种可能的实现方式,所述确认所述目标对象为首次提交之后,还包括:
若所述第二请求执行过程中未生成异常信息,在所述会话控制文件中,删除修改后的目标对象的标识。
可选地,作为一种可能的实现方式,所述将修改后的目标对象的标识恢复为修改前的目标对象的标识之后,还包括:
当接收到所述客户端发送的用于提交所述目标对象的第三请求时,根据所述第三请求中的目标对象的标识,查询所述会话控制文件中恢复后的目标对象的标识,以得到所述存储的令牌;
根据所述第三请求中的令牌与存储的令牌是否相同,判断所述目标对象是否为首次提交。
可选地,作为一种可能的实现方式,所述第一请求,包括直译式脚本语言JS数组,所述JS数组的元素为所述目标对象的统一资源定位符URL。
可选地,作为一种可能的实现方式,所述在会话控制文件中,存储所述目标对象的标识,以及对应的令牌,包括:
在会话控制文件中,以键值对形式存储所述目标对象的标识,以及对应的令牌;
其中,所述键值对包括属性键和对应的属性值;
所述属性键取值为所述目标对象的标识,对应的所述属性值取值为所述目标对象的标识对应的令牌,所述目标对象的标识为所述目标对象的URL。
本发明实施例的防重复提交方法,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。
为达上述目的,本发明第二方面实施例提出了一种防重复提交装置,包括:
接收模块,用于接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成模块,用于生成所述目标对象的令牌;
存储模块,用于在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
发送模块,用于向所述客户端发送所述令牌;
查询模块,用于当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
识别模块,用于若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
可选地,作为一种可能的实现方式,所述识别模块,还用于:
若所述第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
可选地,作为一种可能的实现方式,所述装置,还包括:
恢复模块,用于若确认所述目标对象为首次提交之后,所述第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识。
可选地,作为一种可能的实现方式,所述装置,还包括:
删除模块,用于若确认所述目标对象为首次提交之后,所述第二请求执行过程中未生成异常信息,在所述会话控制文件中,删除修改后的目标对象的标识。
可选地,作为一种可能的实现方式,所述查询模块,还用于当接收到所述客户端发送的用于提交所述目标对象的第三请求时,根据所述第三请求中的目标对象的标识,查询所述会话控制文件中恢复后的目标对象的标识,以得到所述存储的令牌;
所述识别模块,还用于根据所述第三请求中的令牌与存储的令牌是否相同,判断所述目标对象是否为首次提交。
可选地,作为一种可能的实现方式,所述第一请求,包括JS数组,所述JS数组的元素为所述目标对象的统一资源定位符URL。
可选地,作为一种可能的实现方式,所述存储模块,具体用于:
在会话控制文件中,以键值对形式存储所述目标对象的标识,以及对应的令牌;
其中,所述键值对包括属性键和对应的属性值;
所述属性键取值为所述目标对象的标识,对应的所述属性值取值为所述目标对象的标识对应的令牌,所述目标对象的标识为所述目标对象的URL。
本发明实施例的防重复提交装置,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。
为达上述目的,本发明第三方面实施例提出了一种防重复提交系统,包括客户端和服务端;
所述服务端,用于执行如第一方面所述的防重复提交方法;
所述客户端,用于在页面渲染前,向所述服务端发送第一请求;并接收到所述服务端根据所述第一请求生成的目标对象的令牌,以在用于提交所述目标对象的第二请求中携带所述令牌;其中,所述第一请求用于指示所述页面中防重复提交的目标对象。
为达上述目的,本发明第四方面实施例提出了一种计算机设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行如第一方面所述的防重复提交方法。
为了实现上述目的,本发明第四方面实施例提出了一种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器被执行时,能够执行如第一方面所述的防重复提交方法。
为了实现上述目的,本发明第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行如第一方面所述的防重复提交方法。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例所提供的一种防重复提交方法的流程示意图;
图2为本发明实施例提供的另一种防重复提交方法的流程示意图;
图3为本发明实施例提供的一种防重复提交装置的结构示意图;
图4为本发明实施例提供的另一种防重复提交装置的结构示意图;
图5为服务端与客户端交互的示意图之一;
图6为服务端与客户端交互的示意图之二;以及
图7示出了适于用来实现本申请实施方式的示例性计算机设备的框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参考附图描述本发明实施例的防重复提交方法和装置。
在现有技术中,防重复提交方法是使用struts2的经典防重复提交方案。具体来说,也就是利用会话控制令牌(session token)机制和taglib标签技术实现防重复提交。
首先,在用户要提交的表单中加入<s:token>标签,当浏览器首次访问这个带有<s:token>标签的页面时,服务端会解析该标签,并生成一个随机的字符串,也就是令牌,发送给客户端浏览器,同时,服务端会把这个令牌保存到会话控制文件的(session)对象中。
进而,当用户首次提交表单时,会将该令牌一并提交到服务端,服务端会将该令牌与会话控制文件中保存的令牌作比较,若一致则判定为首次提交,并且移除会话控制文件中的令牌。当再次提交表单时,发现会话控制文件中的令牌已经移除,则判定为重复提交,直接跳转到错误页。
可见,现有技术中,必须基于标签库技术加入<s:token>标签,因此,仅适用于JSP页面,适用范围受限,无法应用于互联网领域广泛应用的HTML页面。
针对这一问题,本发明实施例提供了一种防重复提交方法,以扩大防重复提交的应用范围,使得包括HTML在内的页面均能够实现防重复提交,图1为本发明实施例所提供的一种防重复提交方法的流程示意图,本实施例所提供的方法可以由服务端执行,该服务端与客户端交互,用于对客户端的页面相关请求进行响应。作为一种可能的实现方式,图1所示的方法具体可以由服务端中的方重复提交拦截器执行。
如图1所示,该防重复提交方法包括以下步骤:
步骤101,接收客户端在页面渲染前发送的第一请求。
其中,第一请求用于指示页面中防重复提交的目标对象。
具体地,客户端在打开页面时,向服务端发送第一请求。从而服务端可以在接收到第一请求之后,对该第一请求进行解析,获知页面中需防重复提交的目标对象。
作为一种可能的实现方式,第一请求具体形式,可以为AJAX请求,也就是Asynchronous Javascript And XML,即异步直译式脚本语言(JavaScript,JS)和可扩展标记语言(XML),也称为异步更新请求。
在AJAX请求中,包括一个JS数组,JS数组的元素为目标对象的统一资源定位符URL。从而服务端根据JS数组中的URL确定所需进行防重复提交的目标对象。
步骤102,生成目标对象的令牌,并在会话控制文件中,存储目标对象的标识,以及对应的令牌。
具体地,防重复提交拦截器生成目标对象的令牌。进而在会话控制文件中,以键值对形式存储目标对象的标识,以及对应的令牌。其中,键值对包括属性键和对应的属性值。
具体来说,属性键取值为目标对象的标识,对应的属性值取值为目标对象的标识对应的令牌,目标对象的标识为目标对象的URL。
步骤103,向客户端发送令牌。
具体地,防重复提交拦截器将令牌封装为JSON对象,将该JSON对象发送至客户端,以使客户端从JSON对象中,提取键值对得到目标对象的URL,以及对应的令牌。也就是说,JSON对象中,包括属性键和属性值,其中,属性键取值为目标对象的URL,属性值为该目标对象的令牌。
进而由客户端在提取到目标对象及其令牌之后,存储到本地变量中。并在用户触发针对目标对象的提交时,读取存储的目标对象的令牌,并据此生成用于提交目标对象的第二请求,第二请求中包含读取到的目标对象的令牌。
步骤104,当接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的目标对象的标识,在会话控制文件中查询,以得到存储的令牌。
具体地,当服务端的接口接收到客户端发送的用于提交目标对象的第二请求时,将第二请求中URL对应的令牌,作为请求的头(header)属性传递给防重复提交拦截器。进而防重复提交拦截器根据第二请求中的目标对象的标识,也就是URL,在会话控制文件中查询,以得到存储的令牌。
步骤105,若第二请求中的令牌与存储的令牌相同,确认目标对象为首次提交,并在会话控制文件中,修改目标对象的标识。
具体地,若客户端发送的第二请求中的令牌与服务端存储的令牌相同,则防重复提交拦截器确认目标对象为首次提交。进而,在会话控制文件中,修改目标对象的标识,以便后续重复提交时,进行防重复提交识别。
反之,若第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
本实施例中,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。
为了清楚说明上一实施例,本实施例提供了另一种防重复提交方法,图2为本发明实施例提供的另一种防重复提交方法的流程示意图,在图1的基础上,步骤105之后,还包括以下步骤:
步骤201,判断第二请求执行过程中,是否生成异常信息。
具体地,服务端中的业务系统执行第二请求,若在执行过程中,抛出业务异常,例如:校验错误异常,而非系统异常,防重复提交拦截器会对抛出的业务异常进行捕获,并插入第二请求执行的上下文线程的相关变量中。
步骤202,若第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识。
具体地,作为一种可能的实现方式,在前述实施例的步骤105中,若防重复提交拦截器确认目标对象为首次提交,则会在会话控制文件中,采用可恢复的方式修改目标对象的标识。
作为一种可能的实现方式,防重复提交拦截器在会话控制文件中,将该目标对象的令牌对应的目标对象的标识前和/或后添加固定字符前缀。
例如:会话控制文件中,某一目标对象涉及的属性键为作为目标对象标识的URL,属性值为作为令牌的32位随机数。在URL拼接后缀“_validToken”从而形成新的URL。
经过这种修改后,会话控制文件中,若第二请求执行过程中生成异常信息,还可以将修改后的目标对象的标识恢复为修改前的目标对象的标识。从而将后续用于重新提交的请求视为首次提交。
步骤203,当接收到客户端发送的用于提交目标对象的第三请求时,根据第三请求中的目标对象的标识,查询会话控制文件中恢复后的目标对象的标识,以得到存储的令牌。
具体地,由于上一次执行请求出现异常,从而客户端重新提交第三请求。当服务端的接口接收到客户端发送的用于提交目标对象的第三请求时,将第三请求中URL对应的令牌,作为请求的头(header)属性传递给防重复提交拦截器。进而防重复提交拦截器根据第三请求中的目标对象的标识,也就是URL,在会话控制文件中查询,以得到存储的令牌。
步骤204,根据所述第三请求中的令牌与存储的令牌是否相同,判断所述目标对象是否为首次提交。
具体地,若第三请求中的令牌与存储的令牌相同,判断目标对象为首次提交。反之,若第三请求中的令牌与存储的令牌不相同,或者未查询到令牌,判断目标对象为重复提交。
可见,通过防重复提交拦截器确认目标对象为首次提交时,会在会话控制文件中,采用可恢复的方式修改目标对象的标识。使得防重复提交拦截器支持业务异常回滚。
由于业务异常一般是指正常的业务处理时,由于某些业务的特殊要求而导致处理不能继续所抛出的异常,如业务校验出错、流程处理失败等等。
现有技术中的防重复提交方案是不支持异常回滚的,也就是说,当首次提交无论是否抛异常,二次提交都会报重复提交异常。但从业务异常的含义来看,应该属于开发业务时手动设置的,若首次提交抛业务异常,二次提交也应该被算作为首次提交,而不应该抛重复提交异常。本实施例提供了业务异常回滚机制,当提交过程中抛业务异常,不做重复提交的判定,直至成功提交才被算作是首次提交。
步骤205,若第二请求执行过程中未生成异常信息,在会话控制文件中,删除修改后的目标对象的标识。
具体地,若第二请求执行过程中未生成异常信息,视为第二请求正常执行完毕,后续提交目标对象的请求均为重复提交。则可以在会话控制文件中,删除修改后的目标对象的标识。使得当接收到重复提交的请求时,无法查询到目标对象的标识,从而使得防重复提交拦截器确定该请求为重复提交。
本实施例中,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。另外,本实施例还支持业务回滚,更加符合业务需求。
为了实现上述实施例,本发明还提出一种防重复提交装置。
图3为本发明实施例提供的一种防重复提交装置的结构示意图。
如图3所示,该防重复提交装置包括:接收模块31、生成模块32、存储模块33、发送模块34、查询模块35和识别模块36。
接收模块31,用于接收客户端在页面渲染前发送的第一请求。
其中,第一请求用于指示所述页面中防重复提交的目标对象。第一请求,包括JS数组,所述JS数组的元素为所述目标对象的统一资源定位符URL。
生成模块32,用于生成所述目标对象的令牌。
存储模块33,用于在会话控制文件中,存储所述目标对象的标识,以及对应的令牌。
具体地,存储模块33,具体用于:在会话控制文件中,以键值对形式存储所述目标对象的标识,以及对应的令牌;其中,所述键值对包括属性键和对应的属性值;所述属性键取值为所述目标对象的标识,对应的所述属性值取值为所述目标对象的标识对应的令牌,所述目标对象的标识为所述目标对象的URL。
发送模块34,用于向所述客户端发送所述令牌。
查询模块35,用于当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌。
识别模块36,用于若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
需要说明的是,前述对方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。
本实施例中,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。
基于上述实施例,本发明实施例还提供了一种防重复提交装置的可能的实现方式,图4为本发明实施例提供的另一种防重复提交装置的结构示意图,在上一实施例的基础上,防重复提交装置的识别模块36,还用于:
若所述第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
进一步,防重复提交装置,还包括:恢复模块41和删除模块42。
恢复模块41,用于若确认所述目标对象为首次提交之后,所述第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识。
删除模块42,用于若确认所述目标对象为首次提交之后,所述第二请求执行过程中未生成异常信息,在所述会话控制文件中,删除修改后的目标对象的标识。
进一步,查询模块35,还用于当接收到所述客户端发送的用于提交所述目标对象的第三请求时,根据所述第三请求中的目标对象的标识,查询所述会话控制文件中恢复后的目标对象的标识,以得到所述存储的令牌。
识别模块36,还用于根据所述第三请求中的令牌与存储的令牌是否相同,判断所述目标对象是否为首次提交。
本发明实施例中,通过服务端在接收客户端在页面渲染前发送的第一请求之后,根据第一请求生成并存储页面中各目标对象的令牌。进而向客户端发送令牌,并在接收到客户端发送的用于提交目标对象的第二请求时,根据第二请求中的令牌与存储的令牌是否相同,判断目标对象是否为首次提交。由于采用了客户端在页面渲染前发送第一请求的方式生成令牌,替换了现有技术中通过页面携带<s:token>标签,并由服务端解析该标签生成令牌的步骤,进而解决了由于<s:token>标签仅能够适用于JSP页面,所导致的现有技术中防重复提交的应用范围受限的技术问题。另外,本实施例还支持业务回滚,更加符合业务需求。
为了清楚说明前述实施例,本实施例还提供了一种防重复提交系统,包括客户端和服务端。
服务端,用于执行前述实施例中的防重复提交方法。
客户端,用于在页面渲染前,向服务端发送第一请求;并接收到所述服务端根据所述第一请求生成的目标对象的令牌,以在用于提交所述目标对象的第二请求中携带所述令牌;其中,所述第一请求用于指示所述页面中防重复提交的目标对象。
图5为服务端与客户端交互的示意图之一,如图5所示,在生成令牌时:
客户端在打开页面时,向服务端发送第一请求。从而服务端可以在接收到第一请求之后,对该第一请求进行解析,获知页面中需防重复提交的目标对象。
作为一种可能的实现方式,第一请求具体形式,可以为AJAX请求,也就是Asynchronous Javascript And XML,即异步直译式脚本语言(JavaScript,JS)和可扩展标记语言(XML),也称为异步更新请求。
在AJAX请求中,包括一个JS数组,JS数组的元素为目标对象的统一资源定位符URL。从而服务端根据JS数组中的URL确定所需进行防重复提交的目标对象。
服务端中的防重复提交拦截器生成目标对象的令牌。进而在会话控制文件中,以键值对形式存储目标对象的标识,以及对应的令牌。其中,键值对包括属性键和对应的属性值。进而,服务端中的防重复提交拦截器将令牌封装为JSON对象,将该JSON对象发送至客户端,以使客户端从JSON对象中,提取键值对得到目标对象的URL,以及对应的令牌。进而由客户端在提取到目标对象及其令牌之后,存储到本地变量中。
进而,图6为服务端与客户端交互的示意图之二,如图6所示,在防重复提交时:
用户触发针对目标对象的提交时,客户端读取存储的目标对象的令牌,并据此生成用于提交目标对象的第二请求,第二请求中包含读取到的目标对象的令牌。当服务端的接口接收到客户端发送的用于提交目标对象的第二请求时,将第二请求中URL对应的令牌,作为请求的头(header)属性传递给防重复提交拦截器。进而防重复提交拦截器根据第二请求中的目标对象的标识,也就是URL,在会话控制文件中查询,以得到存储的令牌。服务端中的防重复提交拦截器根据第二请求中的令牌与存储的令牌是否相同,确认目标对象是否为首次提交。
进一步,后续还可以执行业务回滚。具体可参见图2对应实施例的相关描述,本实施例中不再赘述。
为了实现上述实施例,本发明还提出另一种计算机设备,包括:处理器,以及用于存储所述处理器可执行指令的存储器。
其中,处理器被配置为:
接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成所述目标对象的令牌,并在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
向所述客户端发送所述令牌;
当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
为了实现上述实施例,本发明还提出一种非临时性计算机可读存储介质,当所述存储介质中的指令由处理器被执行时,能够执行一种防重复提交方法,所述方法包括:
接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成所述目标对象的令牌,并在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
向所述客户端发送所述令牌;
当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
为了实现上述实施例,本发明还提出一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行一种防重复提交方法,所述方法包括:
接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成所述目标对象的令牌,并在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
向所述客户端发送所述令牌;
当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识。
图7示出了适于用来实现本申请实施方式的示例性计算机设备的框图。图7显示的计算机设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器37。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统38可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc Read OnlyMemory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc Read OnlyMemory;以下简称:DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块43的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块43包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块43通常执行本申请所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local AreaNetwork;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现前述实施例中提及的访问权限控制方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (9)
1.一种防重复提交方法,其特征在于,包括以下步骤:
接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成所述目标对象的令牌,并在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
向所述客户端发送所述令牌;
当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识;
所述确认所述目标对象为首次提交之后,还包括:
若所述第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识;
其中,所述根据所述目标对象的标识,在所述会话控制文件中查询之后,还包括:
若所述第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
2.根据权利要求1所述的防重复提交方法,其特征在于,所述确认所述目标对象为首次提交之后,还包括:
若所述第二请求执行过程中未生成异常信息,在所述会话控制文件中,删除修改后的目标对象的标识。
3.根据权利要求1所述的防重复提交方法,其特征在于,所述将修改后的目标对象的标识恢复为修改前的目标对象的标识之后,还包括:
当接收到所述客户端发送的用于提交所述目标对象的第三请求时,根据所述第三请求中的目标对象的标识,查询所述会话控制文件中恢复后的目标对象的标识,以得到所述存储的令牌;
根据所述第三请求中的令牌与存储的令牌是否相同,判断所述目标对象是否为首次提交。
4.根据权利要求1-3任一项所述的防重复提交方法,其特征在于,所述第一请求,包括直译式脚本语言JS数组,所述JS数组的元素为所述目标对象的统一资源定位符URL。
5.根据权利要求1-3任一项所述的防重复提交方法,其特征在于,所述在会话控制文件中,存储所述目标对象的标识,以及对应的令牌,包括:
在会话控制文件中,以键值对形式存储所述目标对象的标识,以及对应的令牌;
其中,所述键值对包括属性键和对应的属性值;
所述属性键取值为所述目标对象的标识,对应的所述属性值取值为所述目标对象的标识对应的令牌,所述目标对象的标识为所述目标对象的URL。
6.一种防重复提交装置,其特征在于,包括:
接收模块,用于接收客户端在页面渲染前发送的第一请求;其中,所述第一请求用于指示所述页面中防重复提交的目标对象;
生成模块,用于生成所述目标对象的令牌;
存储模块,用于在会话控制文件中,存储所述目标对象的标识,以及对应的令牌;
发送模块,用于向所述客户端发送所述令牌;
查询模块,用于当接收到所述客户端发送的用于提交所述目标对象的第二请求时,根据所述第二请求中的目标对象的标识,在所述会话控制文件中查询,以得到存储的令牌;
识别模块,用于若所述第二请求中的令牌与存储的令牌相同,确认所述目标对象为首次提交,并在所述会话控制文件中,修改所述目标对象的标识;
恢复模块,用于若确认所述目标对象为首次提交之后,所述第二请求执行过程中生成异常信息,在所述会话控制文件中,将修改后的目标对象的标识恢复为修改前的目标对象的标识;
所述识别模块,还用于若所述第二请求中的令牌与存储的令牌不同,或在所述会话控制文件中,未查询到存储的令牌,确认所述目标对象为重复提交。
7.一种防重复提交系统,其特征在于,包括客户端和服务端;
所述服务端,用于执行如权利要求1-5任一项所述的防重复提交方法;
所述客户端,用于在页面渲染前,向所述服务端发送第一请求;并接收到所述服务端根据所述第一请求生成的目标对象的令牌,以在用于提交所述目标对象的第二请求中携带所述令牌;其中,所述第一请求用于指示所述页面中防重复提交的目标对象。
8.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如权利要求1-5中任一所述的防重复提交方法。
9.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的防重复提交方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710512169.9A CN109144625B (zh) | 2017-06-28 | 2017-06-28 | 防重复提交方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710512169.9A CN109144625B (zh) | 2017-06-28 | 2017-06-28 | 防重复提交方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109144625A CN109144625A (zh) | 2019-01-04 |
CN109144625B true CN109144625B (zh) | 2021-08-27 |
Family
ID=64803654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710512169.9A Active CN109144625B (zh) | 2017-06-28 | 2017-06-28 | 防重复提交方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109144625B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109922132B (zh) * | 2019-01-18 | 2023-04-11 | 深圳壹账通智能科技有限公司 | 表单请求处理的方法、装置、电子设备及存储介质 |
CN110177145A (zh) * | 2019-05-28 | 2019-08-27 | 四川长虹电器股份有限公司 | 一种防止表单重复提交的方法 |
CN110311986A (zh) * | 2019-07-10 | 2019-10-08 | 中国民航信息网络股份有限公司 | 移动端请求的处理方法和装置 |
CN112583879B (zh) * | 2019-09-30 | 2022-10-04 | 北京国双科技有限公司 | 请求的处理方法、装置及系统、存储介质和电子设备 |
CN111371852B (zh) * | 2020-02-24 | 2022-01-25 | 腾讯科技(深圳)有限公司 | 一种数据处理的方法以及相关装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482820A (zh) * | 2009-02-13 | 2009-07-15 | 山东浪潮齐鲁软件产业股份有限公司 | 一种防止页面重复提交的方法 |
US8046372B1 (en) * | 2007-05-25 | 2011-10-25 | Amazon Technologies, Inc. | Duplicate entry detection system and method |
US8082351B1 (en) * | 2009-05-26 | 2011-12-20 | Adobe Systems Incorporated | Software load balancing for session requests that maintain state information |
CN103152388A (zh) * | 2013-01-31 | 2013-06-12 | 中国科学院计算机网络信息中心 | 一种防止用户重复提交的方法和系统 |
CN103841111A (zh) * | 2014-03-17 | 2014-06-04 | 北京京东尚科信息技术有限公司 | 一种防止数据重复提交的方法和服务器 |
CN104184832A (zh) * | 2014-09-10 | 2014-12-03 | 北京国双科技有限公司 | 网络应用中的数据提交方法及装置 |
CN106156133A (zh) * | 2015-04-09 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 控制表单重复提交的方法、装置及系统 |
CN106372174A (zh) * | 2016-08-31 | 2017-02-01 | 东软集团股份有限公司 | 防止表单重复提交的方法和装置 |
CN106657310A (zh) * | 2016-12-13 | 2017-05-10 | 北京锐安科技有限公司 | 表单的提交方法及装置 |
-
2017
- 2017-06-28 CN CN201710512169.9A patent/CN109144625B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8046372B1 (en) * | 2007-05-25 | 2011-10-25 | Amazon Technologies, Inc. | Duplicate entry detection system and method |
CN101482820A (zh) * | 2009-02-13 | 2009-07-15 | 山东浪潮齐鲁软件产业股份有限公司 | 一种防止页面重复提交的方法 |
US8082351B1 (en) * | 2009-05-26 | 2011-12-20 | Adobe Systems Incorporated | Software load balancing for session requests that maintain state information |
CN103152388A (zh) * | 2013-01-31 | 2013-06-12 | 中国科学院计算机网络信息中心 | 一种防止用户重复提交的方法和系统 |
CN103841111A (zh) * | 2014-03-17 | 2014-06-04 | 北京京东尚科信息技术有限公司 | 一种防止数据重复提交的方法和服务器 |
CN104184832A (zh) * | 2014-09-10 | 2014-12-03 | 北京国双科技有限公司 | 网络应用中的数据提交方法及装置 |
CN106156133A (zh) * | 2015-04-09 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 控制表单重复提交的方法、装置及系统 |
CN106372174A (zh) * | 2016-08-31 | 2017-02-01 | 东软集团股份有限公司 | 防止表单重复提交的方法和装置 |
CN106657310A (zh) * | 2016-12-13 | 2017-05-10 | 北京锐安科技有限公司 | 表单的提交方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109144625A (zh) | 2019-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144625B (zh) | 防重复提交方法、装置和系统 | |
US11734421B2 (en) | Systems and methods to detect and neutralize malware infected electronic communications | |
US11080691B2 (en) | Fork-tolerant consensus protocol | |
US9942349B2 (en) | Incremental browser-based device fingerprinting | |
EP3896894A1 (en) | Systems and methods for generating, uploading, and executing codes blocks within distributed network nodes | |
JP6219993B2 (ja) | 多段認証シーケンスの処理方法および装置 | |
CN106462611B (zh) | 网络访问性能增强 | |
JP6913746B2 (ja) | カーネルモジュールロード方法および装置 | |
WO2021249356A1 (zh) | 表单数据校验方法、系统、服务器和用户终端 | |
US11831617B2 (en) | File upload control for client-side applications in proxy solutions | |
US8799861B2 (en) | Performance-testing a system with functional-test software and a transformation-accelerator | |
CN109995775B (zh) | 区块链验证码应用方法、设备和存储介质 | |
US10127329B2 (en) | Processing large XML files by splitting and hierarchical ordering | |
US12021732B1 (en) | Assistant for automatic generation of server load test scripts | |
CN111770079B (zh) | 一种web框架注入漏洞检测方法及装置 | |
CN112685253B (zh) | 前端报错日志采集方法、装置、设备及存储介质 | |
US20140013155A1 (en) | System and method for facilitating recovery from a document creation error | |
CN113282347A (zh) | 插件运行方法、装置、设备及存储介质 | |
CN110933034A (zh) | 一种基于数字指纹的登录方法及装置 | |
US20170302541A1 (en) | System and method for monitoring service | |
US9489336B2 (en) | Method and system for record access in a distributed system | |
US20200344258A1 (en) | Systems and methods for detecting the injection of malicious elements into benign content | |
KR20080026676A (ko) | 웹 사이트의 침입을 발견하기 위한 방법 및 장치 | |
JP4557761B2 (ja) | タイムスタンプ装置及びタイムスタンププログラム | |
US20060184677A1 (en) | Interim execution context identifier |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |