学习Java 采取令牌的方式避免重复提交
生活随笔
收集整理的這篇文章主要介紹了
学习Java 采取令牌的方式避免重复提交
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
重復(fù)提交原因
從提交頁(yè)面到成功頁(yè)面的跳轉(zhuǎn)一般采用視圖定位,由于視圖定位是在服務(wù)端跳轉(zhuǎn)的,如果用戶在點(diǎn)擊提交之后再次刷新頁(yè)面,會(huì)導(dǎo)致重復(fù)提交,數(shù)據(jù)庫(kù)的數(shù)據(jù)會(huì)有重復(fù)。
采用令牌措施
1、在轉(zhuǎn)賬展示頁(yè)面生成一個(gè)隨機(jī)的令牌號(hào)碼,然后放入session和傳參中。
@RequestMapping("/toTrans")//public String toTrans(ModelMap modelMap, HttpSession session) {//!////如果是轉(zhuǎn)賬,則先查詢余額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);//跳轉(zhuǎn)到轉(zhuǎn)賬頁(yè)面return "trans";}2、跳轉(zhuǎn)到轉(zhuǎn)賬的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中的令牌比較,看是否一樣,一樣則進(jìn)入轉(zhuǎn)賬成功頁(yè)面,否則轉(zhuǎn)賬失敗。注意進(jìn)入轉(zhuǎn)賬成功頁(yè)面后需要銷毀令牌,以防重復(fù)提交。 @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下面,返回地址會(huì)是tans/web-inf...} catch (Exception e) {e.printStackTrace();modelMap.addAttribute("msg", e.getMessage());return "fail";}}```
經(jīng)過(guò)上述步驟,當(dāng)進(jìn)入轉(zhuǎn)賬成功頁(yè)面后,因?yàn)榱钆埔呀?jīng)銷毀,當(dāng)用戶再次刷新時(shí),將會(huì)跳轉(zhuǎn)到轉(zhuǎn)賬失敗頁(yè)面,從而避免了重讀提交的問(wèn)題。
轉(zhuǎn)載于:https://www.cnblogs.com/HashMap-Fantasy/p/8972313.html
總結(jié)
以上是生活随笔為你收集整理的学习Java 采取令牌的方式避免重复提交的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Unity之流光效果
- 下一篇: spring IOC 之篇三:默认标签的