實現簡訊驗證碼設定有效時長
阿新 • • 發佈:2019-02-08
//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";
}
}