實現一個發送短信驗證碼的請求,要求5分鍾之內重復請求,返回同一個驗證碼。
網上可找到幾種方案:
如,存儲數據庫或緩存中。實現起來比較麻煩,舍棄;
另一種方式即本例,使用session存儲。其他方式,暫未進一步了解
@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中刪除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);
------------------------------------------------------------------------------------------------------------------------------------------歡迎光臨,期待您的下次光臨!