本文實例為大家分享了java實現短信驗證碼5分鐘有效時間,供大家參考,具體內容如下
實現一個發送短信驗證碼的請求,要求5分鐘之內重復請求,返回同一個驗證碼。
網上可找到幾種方案:
如,存儲數據庫或緩存中。實現起來比較麻煩,舍棄;
另一種方式即本例,使用session存儲。其他方式,暫未進一步了解。
實現步驟: (springmvc)
1、controller中,獲取session對象,取code,取不到新生成,并存儲session中;
2、單手機號發送量,判斷并 +1 記入數據庫;
3、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("checkCode",checkCode); CheckCodeMessage checkCodeMessage=new CheckCodeMessage(phone,checkCode); try { HttpSender.batchSend(checkCodeMessage); //TimerTask實現5分鐘后從session中刪除checkCode final Timer timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { httpSession.removeAttribute("checkCode"); System.out.println("checkCode刪除成功"); timer.cancel(); } },5*60*1000); } catch (Exception e) { e.printStackTrace(); } return "redirect:/index.jsp"; }}
Timer定時任務:
//TimerTask實現5分鐘后從session中刪除checkCodefinal Timer timer=new Timer();timer.schedule(new TimerTask() { @Override public void run() { httpSession.removeAttribute("checkCode"); System.out.println("checkCode刪除成功"); timer.cancel(); }},5*60*1000);
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。
新聞熱點
疑難解答
圖片精選