• 基于session实现发送短信和验证码登录注册功能


    (笔记总结自《黑马点评》项目)

    实现短信验证码登录流程:

    一、发送短信

    Controller层

    1. @PostMapping("code")
    2. public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
    3. // TODO 发送短信验证码并保存验证码
    4. // return Result.fail("功能未完成");
    5. return userService.sendCode(phone,session);
    6. }

    Service层:

    1. @Override
    2. public Result sendCode(String phone, HttpSession session) {
    3. //校验手机号
    4. if (RegexUtils.isPhoneInvalid(phone)) {
    5. //如果不符合,返回错误信息
    6. return Result.fail("手机号格式错误!");
    7. }
    8. //符合,生成验证码
    9. String code = RandomUtil.randomNumbers(6);
    10. //保存验证码到session
    11. session.setAttribute("code",code);
    12. //发送验证码
    13. log.debug("发送短信验证码成功"+":"+code);
    14. //返回ok
    15. return Result.ok();
    16. }

    二、验证码登录注册

    Controller层:

    1. @PostMapping("/login")
    2. public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){
    3. // TODO 实现登录功能
    4. //return Result.fail("功能未完成");
    5. return userService.login(loginForm, session);
    6. }

    Service层:

    1. @Override
    2. public Result login(LoginFormDTO loginForm, HttpSession session) {
    3. //校验手机号
    4. String phone = loginForm.getPhone();
    5. if (RegexUtils.isPhoneInvalid(phone)) {
    6. //如果不符合,返回错误信息
    7. return Result.fail("手机号格式错误!");
    8. }
    9. //校验验证码
    10. Object cacheCode = session.getAttribute("code");
    11. String code = loginForm.getCode();
    12. if(cacheCode == null || !cacheCode.toString().equals(code)){
    13. //不一致,报错
    14. return Result.fail("验证码错误");
    15. }
    16. //一致,根据手机号查询用户 select * from tb_user where phone = ?
    17. User user = query().eq("phone", phone).one();
    18. //判断用户是否存在
    19. //不存在,创建新用户并保存
    20. if(user == null){
    21. user = createUserWithPhone(phone);
    22. }
    23. //存在,保存用户信息到session中
    24. session.setAttribute("user",user);
    25. return Result.ok();
    26. }
    27. private User createUserWithPhone(String phone) {
    28. //创建用户
    29. User user = new User();
    30. user.setPhone(phone);
    31. user.setNickName("user_"+RandomUtil.randomString(10));
    32. //保存用户
    33. save(user);
    34. return user;
    35. }

    query()是mybatis-plus当中的查询方法,此案例中query()相当于"select * from tb_user"。在User类中有“@TableName("tb_user")”注解标明所查询数据表,one()表示返回一条数据,如果是多条数据用list()。save()是保存数据的方法。

  • 相关阅读:
    解决JAVA对象属性首字母大写无法映射值
    Maven - 客户端 Nexus 配置
    LeetCode:2. 两数之和
    STM32F103单片机工程移植到航顺单片机HK32F103注意事项
    说说你对Rust的了解?
    计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)
    web前端期末大作业——餐品后台管理系统(html+css+javascript)
    StringBuilder 线程不安全,到底哪里不安全?
    安装虚拟机找不到虚拟网啦1(eth1)不出现
    持续进阶,软通动力稳步推动云智能战略
  • 原文地址:https://blog.csdn.net/m0_64694079/article/details/132725884