后端方法解决 提交防重复处理

1、可以利用JavaScript 来做判断当用户点击了就禁用按钮或者是删除按钮的点击事件,但是这样做治标不治本。
2、利用token来实现防止重复提交的操作,这种做法是最常用的也是最简便的。

具体的做法:在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。

逻辑操作代码:

if(payload_params.containsKey("token")&&payload_params.getString("token")!=null&&!"".equals(payload_params.getString("token"))){         String client_token =payload_params.getString("token");         if(!isRepeatSubmit(request,client_token)){                 WsrzCheckRzService.getRzResultForCheckRz(request, conn, responseJson, courseId, 
practiceId, true);                 boolean effo = this.reomveSaveTokenInSession(request);//清除session中保存认证的token                 responseJson.put(PropKeys.RES_CODE, PropKeys.CODE_SUCCESS);         }else{                 log().info("用户重复提交");                 responseJson.put(PropKeys.RES_MSG, "请不要重复提交");         }}else{         log().info("未传入保存token");         responseJson.put(PropKeys.RES_MSG, PropKeys.CODE_ERROR_MSG);} 

操作Session基本方法:

/** * @Author liwt * @Description //创建保存网上认证 token 到session中 * @Date 2019/1/17 14:36 * @param request * @throws * @return 生成的token */private String createSaveTokenToSession(HttpServletRequest request){         // 生成token令牌  返回给wsrz_invoice_rz_result.jsp  在保存时做防止重复提交。         String token = DateUtils.getUniqueID();         log().info("保存网上认证Token:"+token);         request.getSession().setAttribute("save_wsrz_token", token);  //在服务器使用session保存token(令牌)         return token;}private boolean reomveSaveTokenInSession(HttpServletRequest request){         Object obj = request.getSession().getAttribute("save_wsrz_token");         if(obj!=null){                 request.getSession().removeAttribute("save_wsrz_token");//移除session中的token                 return true;         }else{                 return false;         }}/** * @Author liwt * @Description //判断客户端提交上来的令牌和服务器端生成的令牌是否一致 * @Date 2019/1/17 10:23 * @param request * @throws * @return boolean * true 用户重复提交了表单 * false 用户没有重复提交表单 */private boolean isRepeatSubmit(HttpServletRequest request,String client_token) {          //取出存储在Session中的token          Object obj = request.getSession().getAttribute("save_wsrz_token");          //2、如果当前用户的Session中不存在Token(令牌),则用户是重复提交了表单          if(obj==null){                  return true;          }          String server_token = String.valueOf(obj);          //3、存储在Session中的Token(令牌)与表单提交的Token(令牌)不同,则用户是重复提交了表单          if(client_token.equals(server_token)){                  return false;          }else{                  return true;          }         }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值