• 发送短信验证码执行登录操作


    短信服务介绍:

    目前市场上有很多第三方提供的短信服务,这些第三方短息服务会和各个运营商(移动,联通,电信)对接,我们只需要注册成为会员,并且按照提供的开发文档进行调用就可以完成发送短信,需要说明的是,这些短信服务一般都是收费服务。

    常用的短信服务:

    阿里云

    华为

    腾讯云

    京东

    梦网

    乐信

    以下主要用阿里云的短信发送服务来开展!

    阿里云短信服务--介绍

    阿里云短信服务是广大企业客户快速触达手机用户所优选使用的通信能力,调用api或者群发助手,即可发送验证码,通知类和营销类短信,国内验证短信秒级触达,到达率最高可到99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。

    应用场景:

    验证码

    短信通知

    推广短信

    在阿里云完成相关的申请即可使用官方代码来进行业务操作 !

    (1)引入阿里云的手机验证依赖

    1. com.aliyun
    2. aliyun-java-sdk-core
    3. 4.5.16
    4. com.aliyun
    5. aliyun-java-sdk-dysmsapi
    6. 2.1.0

    (2)改装短信发送代码

    1. /**
    2. * 短信发送工具类
    3. */
    4. public class SMSUtils {
    5. /**
    6. * 发送短信
    7. * @param signName 签名
    8. * @param templateCode 模板
    9. * @param phoneNumbers 手机号
    10. * @param param 参数
    11. */
    12. public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
    13. DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "accessKeyId", "secret");
    14. IAcsClient client = new DefaultAcsClient(profile);
    15. SendSmsRequest request = new SendSmsRequest();
    16. request.setSysRegionId("cn-hangzhou");
    17. request.setPhoneNumbers(phoneNumbers);
    18. request.setSignName(signName);
    19. request.setTemplateCode(templateCode);
    20. request.setTemplateParam("{\"code\":\""+param+"\"}");
    21. try {
    22. SendSmsResponse response = client.getAcsResponse(request);
    23. System.out.println("短信发送成功");
    24. }catch (ClientException e) {
    25. e.printStackTrace();
    26. }
    27. }
    28. }

    业务层根据模板进行发送验证码的操作

    并且在登录时候判断验证码输入是否正确

    验证法正确输入后判断是否为新用户

    如果是新用户自动进行增加用户操作

    1. @RestController
    2. @RequestMapping("/user")
    3. @Slf4j
    4. public class UserController {
    5. @Autowired
    6. private UserService userService;
    7. /**
    8. * 发送手机短信验证码
    9. * @param user
    10. * @return
    11. */
    12. @PostMapping("/sendMsg")
    13. public R sendMsg(@RequestBody User user, HttpSession session){
    14. //获取手机号
    15. String phone = user.getPhone();
    16. if(StringUtils.isNotEmpty(phone)){
    17. //生成随机的4位验证码
    18. String code = ValidateCodeUtils.generateValidateCode(4).toString();
    19. log.info("code={}",code);
    20. //调用阿里云提供的短信服务API完成发送短信
    21. //SMSUtils.sendMessage("签名","",phone,code);
    22. //需要将生成的验证码保存到Session
    23. session.setAttribute(phone,code);
    24. return R.success("手机验证码短信发送成功");
    25. }
    26. return R.error("短信发送失败");
    27. }
    28. /**
    29. * 移动端用户登录
    30. * @param map
    31. * @param session
    32. * @return
    33. */
    34. @PostMapping("/login")
    35. public R login(@RequestBody Map map, HttpSession session){
    36. log.info(map.toString());
    37. //获取手机号
    38. String phone = map.get("phone").toString();
    39. //获取验证码
    40. String code = map.get("code").toString();
    41. //从Session中获取保存的验证码
    42. Object codeInSession = session.getAttribute(phone);
    43. //进行验证码的比对(页面提交的验证码和Session中保存的验证码比对)
    44. if(codeInSession != null && codeInSession.equals(code)){
    45. //如果能够比对成功,说明登录成功
    46. LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    47. queryWrapper.eq(User::getPhone,phone);
    48. User user = userService.getOne(queryWrapper);
    49. if(user == null){
    50. //判断当前手机号对应的用户是否为新用户,如果是新用户就自动完成注册
    51. user = new User();
    52. user.setPhone(phone);
    53. user.setStatus(1);
    54. userService.save(user);
    55. }
    56. session.setAttribute("user",user.getId());
    57. return R.success(user);
    58. }
    59. return R.error("登录失败");
    60. }
    61. }

  • 相关阅读:
    ​力扣解法汇总593-有效的正方形
    【网络服务&数据库教程】09 Tomcat 与 Rsync 服务
    【C++】智能指针
    【unity3D-网格编程】01:Mesh基础属性以及用代码创建一个三角形
    计算机专业毕设课设选题攻略
    Windows 10 安装配置WSL2(Ubuntu 20.04)教程
    【OpenCV--视频文件相关操作】
    第二十章——多线程
    商超智能守护:AI监控技术在零售安全中的应用
    【深度学习-第5篇】使用Python快速实现CNN分类(模式识别)任务,含一维、二维、三维数据演示案例(使用pytorch框架)
  • 原文地址:https://blog.csdn.net/wmd13164306712/article/details/126815738