注冊時經常會用到短信驗證碼。通過第三方平台接口實現短信發送。
直接上代碼

1 @ResponseBody 2 @RequestMapping(value="/dycode.htm") 3 public Object getDynamicCode(@PathVariable String mobile){ 4 Jedis jedis = null; 5 try{ 6 jedis = jedisPool.getResource(); 7 if(jedis.ttl(mobile) > 240){ 8 return getResponse(2, "獲取動態驗證碼太頻繁!"); 9 } 10 String verifyCode = Utilities.getVerifyCode(6); 11 Runnable runnable = new Runnable() { 12 public void run() { 13 String smsServerUrl = "http://smssh1.253.com/msg/send/json"; 14 String msg = "【某某平台】 "+ verifyCode +" (某某平台驗證碼,請完成驗證),如非本人操作,請忽略本短信。"; 15 SmsSendRequest smsSingleRequest = new SmsSendRequest("N......2", "he.......c", msg, mobile, "true"); 16 String requestJson = JSON.toJSONString(smsSingleRequest); 17 String response = ChuangLanSmsUtil.sendSmsByPost(smsServerUrl, requestJson); 18 JSONObject jsonResObj = JSON.parseObject(response); 19 if(jsonResObj.getInteger("code") != 0){ 20 logger.warn("獲取動態驗證碼失敗:" + response); 21 } 22 } 23 }; 24 new Thread(runnable).start(); 25 jedis.setex(mobile, 300, verifyCode); 26 return getResponse(0, "請求發送動態驗證碼成功!"); 27 }catch (Exception e) { 28 e.printStackTrace(); 29 logger.error("請求發送動態驗證碼時:" + e.toString()); 30 return getResponse(-1); 31 }finally { 32 if(jedis != null){ 33 jedis.close(); 34 } 35 } 36 }
1.點擊發送驗證碼功能時,倒計時60秒才能再次點擊(前端js控制)
此時通過 Utilities.getVerifyCode(6) 方法生成6位數驗證碼,通過第三方發送到指定手機號碼
2.將驗證碼存入redis,並設置失效時間
jedis.setex(mobile, 300, verifyCode);
這里設置為300s失效。
登錄時取對應存儲的手機號的驗證碼,進行忽略大小寫驗證。驗證成功則刪除redis存入的此驗證碼。
注:在驗證碼未失效時,查詢此手機號對應驗證碼的失效時間,提示獲取驗證碼過於頻繁。