ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

短信发送与验证

2021-02-02 16:04:40  阅读:205  来源: 互联网

标签:短信 String 验证 发送 result new ResultCode setResultCode


这次任务是写一个短信验证功能。

 

1 发送接口

 

 

 

 1 @RequestMapping("sendSMSVerification")
 2     @ResponseBody
 3     public Result sendSMSVerification(HttpServletRequest request,String type){
 4         PcUser user = getUser(request);
 5         String mobile = user.getUserAccount();
 6         Result result =new Result();
 7         boolean phone = PhoneUtils.isPhone(mobile);
 8         if (mobile==null) {
 9             result.setResultCode(new ResultCode(-1, "手机号为空"));
10             return result;
11         }
12         if (!phone) {
13             result.setResultCode(new ResultCode(-1, "手机号格式不正确"));
14             return result;
15         }
16         try {
17             ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
18             String redisKey = "SMS_XCX_LOCK:Phone=" + mobile+"Type="+type;
19             String val = valueOps.get(redisKey);
20             if (com.jiutong.lang.StringUtils.isNotBlank(val)) {
21                 result.setResultCode(new ResultCode(-1, "请勿重复发验证码"));
22                 log.warn("warn sendIdentifyCode res={}", JSON.toJSONString(result));
23                 return result;
24             }
25             //验证码
26             String Code = com.jiutong.lang.CommonUtils.getRandomNumber(1000, 9999) + "";
27             //测试定死
28 //            int code = smsService.sendSMSByZml(mobile,Code,SmsScene.WELCOME_TO_USE_AUTO_PARTS);
29             int code =0;
30             if (0 == code) {
31                 //验证码5分钟过期
32 //                valueOps.set(redisKey, Code, 5, TimeUnit.MINUTES);
33                 result.setResultCode(new ResultCode(0, "短信发送成功"));
34             } else {
35                 result.setResultCode(new ResultCode(-1, "短信发送失败"));
36             }
37             log.info("end sendIdentifyCode res={}", JSON.toJSONString(result));
38         }catch (Exception e) {
39             e.printStackTrace();
40         }
41         return  result;
42     }

这里的用户信息是通过session里获取的。

把经常用的获取用户信息,写成一个方法。

 

 

 

public void setUser(HttpServletRequest request, PcUser user, HttpServletResponse response) {
        HttpSession session = request.getSession();
        session.setMaxInactiveInterval(3 * 60 * 60);
        session.setAttribute("user", user);
    }

2 其中对手机号做了处理,判断是否符合手机规则,也有方法。

3 这里做了判断,因为短信有失效时间,所以放进了缓存里,所以只这之前要判断一下缓存是否有之前的数据。

 

 

 4 验证码就是4位或6位 这里自己实际需求选择。

String Code = com.jiutong.lang.CommonUtils.getRandomNumber(1000, 9999) + "";

5 接下来就是关键方法,发送验证码。这里对接的是阿里云短信服务。

 

 

 5.1

 

 这里对短信的场景有枚举。

6 重点是这里

 

 这里是根据阿里的短信文档,自己合理设计。

7 最后是验证短信。

 

 根据key,查redis缓存。也是比较简单的。

 

标签:短信,String,验证,发送,result,new,ResultCode,setResultCode
来源: https://www.cnblogs.com/zq1003/p/14362454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有