十次方后端笔记五:用户和短信微服务
使用阿里云通信产品发送注册验证码

用户微服务

用户微服务代码生成(省略)

注意修改application 配置文件。

用户注册

需求:注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。

思路:在用户微服务编写API ,生成手机验证码,存入Redis并发送到RabbitMQ

准备工作

  1. 引入依赖

    1
    2
    3
    4
    5
    6
    7
    8
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
  2. 配置application.yml

    1
    2
    3
    4
    5
    6
    7
    spring: 
    redis:
    host: 192.168.136.104
    port: 6379
    rabbitmq:
    host: 192.168.136.104
    port: 5672

短信验证码发送

  1. UserController新增方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    * 发送短信验证码
    *
    * @param mobile
    */
    @RequestMapping(value = "/sendsms/{mobile}", method = RequestMethod.POST)
    public Result sendsms(@PathVariable String mobile) {
    userService.sendSms(mobile);
    return new Result(true, StatusCode.OK, "发送成功");
    }
  2. UserService新增方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
    * 发送短信验证码
    *
    * @param mobile 手机号
    */
    public void sendSms(String mobile) {
    //1.生成6位短信验证码
    Random random = new Random();
    int max = 999999;//最大数
    int min = 100000;//最小数
    int code = random.nextInt(max);//随机生成
    if (code < min) {
    code = code + min;
    }
    System.out.println(mobile + "收到验证码是:" + code);
    //2.将验证码放入redis
    redisTemplate.opsForValue().set("smscode_" + mobile, code + "", 5,
    TimeUnit.MINUTES);//五分钟过期
    //3.将验证码和手机号发动到rabbitMQ中
    Map<String, String> map = new HashMap();
    map.put("mobile", mobile);
    map.put("code", code + "");
    rabbitTemplate.convertAndSend("sms", map);
    }

注册

  1. UserController新增方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /**
    * 用户注册
    *
    * @param user
    */
    @RequestMapping(value = "/register/{code}", method = RequestMethod.POST)
    public Result register(@RequestBody User user, @PathVariable String
    code) {
    userService.add(user, code);
    return new Result(true, StatusCode.OK, "注册成功");
    }
  2. UserService新增方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /**
    * 增加
    *
    * @param user 用户
    * @param code 用户填写的验证码
    */
    public void add(User user, String code) {
    //判断验证码是否正确
    String syscode = (String) redisTemplate.opsForValue().get("smscode_" + user.getMobile());
    //提取系统正确的验证码
    if (syscode == null) {
    throw new RuntimeException("请点击获取短信验证码");
    }
    if (!syscode.equals(code)) {
    throw new RuntimeException("验证码输入不正确");
    }
    user.setId(idWorker.nextId() + "");
    user.setFollowcount(0);//关注数
    user.setFanscount(0);//粉丝数
    user.setOnline(0L);//在线时长
    user.setRegdate(new Date());//注册日期
    user.setUpdatedate(new Date());//更新日期
    user.setLastdate(new Date());//最后登陆日期
    userDao.save(user);
    }

短信微服务

短信微服务参考我的另一篇文章:

链接:https://www.imxushuai.com/2001/12/31/乐优商城笔记八:短信微服务/

文章作者: imxushuai
文章链接: https://www.imxushuai.com/2002/01/02/5.十次方后端笔记五:用户和短信微服务/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 imxushuai
支付宝打赏
微信打赏