学习Java 采取令牌的方式避免重复提交
生活随笔
收集整理的這篇文章主要介紹了
学习Java 采取令牌的方式避免重复提交
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
重復提交原因
從提交頁面到成功頁面的跳轉一般采用視圖定位,由于視圖定位是在服務端跳轉的,如果用戶在點擊提交之后再次刷新頁面,會導致重復提交,數據庫的數據會有重復。
采用令牌措施
1、在轉賬展示頁面生成一個隨機的令牌號碼,然后放入session和傳參中。
@RequestMapping("/toTrans")//public String toTrans(ModelMap modelMap, HttpSession session) {//!////如果是轉賬,則先查詢余額String cardNo = (String) session.getAttribute("cardNo");String balance = cardInfoService.findByCardNo(cardNo).getBalance();modelMap.addAttribute("balance", balance);String token = UUID.randomUUID().toString();session.setAttribute("token",token);modelMap.addAttribute("token",token);//跳轉到轉賬頁面return "trans";}2、跳轉到轉賬的trans.jsp文件,注意傳參要輸入name和value,否則Controller層找不到。
``` <form id="transForm" class="am-form am-form-horizontal" action="/trans/doTrans.do" method="post"><input name="bToken" id="bToken" value="${token}"><%--傳參要用name、value,否則Controller找不到--%> <div class="am-form-group"><div class="am-u-sm-9 am-u-sm-push-3"><button type="button" onclick="submitForm()" class="am-btn am-btn-primary">提交</button></div> </div> 3、獲取傳參的令牌與session中的令牌比較,看是否一樣,一樣則進入轉賬成功頁面,否則轉賬失敗。注意進入轉賬成功頁面后需要銷毀令牌,以防重復提交。 @RequestMapping("/doTrans")//? public String doTrans(ModelMap modelMap, @RequestParam String bToken, HttpSession session, @RequestParam String checkInCardNo, @RequestParam String realName, @RequestParam String money) {//!try {String cardNo = (String) session.getAttribute("cardNo");String token = (String) session.getAttribute("token");cardInfoService.forward(cardNo, checkInCardNo, money, realName);if (!bToken.equals(token) || bToken == null || token == null) {session.removeAttribute("token");/*此處可刪可不刪*/return "fail";}session.removeAttribute("token");return "success";//?為什么success.jsp放在web-inf下面,返回地址會是tans/web-inf...} catch (Exception e) {e.printStackTrace();modelMap.addAttribute("msg", e.getMessage());return "fail";}}```
經過上述步驟,當進入轉賬成功頁面后,因為令牌已經銷毀,當用戶再次刷新時,將會跳轉到轉賬失敗頁面,從而避免了重讀提交的問題。
轉載于:https://www.cnblogs.com/HashMap-Fantasy/p/8972313.html
總結
以上是生活随笔為你收集整理的学习Java 采取令牌的方式避免重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity之流光效果
- 下一篇: Java面试题集(二)list与Map相