1. 程式人生 > >實現簡訊驗證碼設定有效時長

實現簡訊驗證碼設定有效時長

//TimerTask實現5分鐘後從session中刪除code
            final Timer timer=new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    httpSession.removeAttribute("code");
                    timer.cancel();
                }
            },5*60*1000);

實現一個傳送簡訊驗證碼的請求,要求5分鐘之內重複請求,返回同一個驗證碼。 
網上可找到幾種方案: 
如,儲存資料庫或快取中。實現起來比較麻煩,捨棄; 
另一種方式即本例,使用session儲存。其他方式,暫未進一步瞭解。

實現步驟:(springmvc) 
1、controller中,獲取session物件,取code,取不到新生成,並存儲session中; 
2、單手機號傳送量,判斷並 +1 記入資料庫; 
2、Timer定時器,設定新執行緒延時執行TimerTask任務(刪除code)

@RequestMapping(value = "sendMessage",method = RequestMethod.GET)
public
Object sendMessage(final HttpServletRequest request){ String phone=request.getParameter("phone"); int times=userService.messageSendToday(phone); //二次驗證,單個手機號每日傳送上限 if(times <= MAX_PER_DAY){ String checkCode=GenerateRandomCode.createRandomNumber(6); final HttpSession httpSession=request.getSession(); httpSession.setAttribute("code"
,checkCode); CheckCodeMessage checkCodeMessage=new CheckCodeMessage(phone,code); try { HttpSender.batchSend(checkCodeMessage); //TimerTask實現5分鐘後從session中刪除code final Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { httpSession.removeAttribute("code"); System.out.println("code刪除成功"); timer.cancel(); } },5*60*1000); } catch (Exception e) { e.printStackTrace(); } return "redirect:/index.jsp"; } }