当前位置:   article > 正文

SpringBoot邮箱集成服务(三)----------邮箱验证用法(后端)_邮箱验证接口

邮箱验证接口

如果喜欢我的编程笔记可以关注我的微信公众号【Java掌上手册】,上面有我不定期的项目面试题分享哦~(关注公众号回复面试宝典便可获得史上最全的后端面试题资料哦!)

1.Controller层编写接口
利用@RequestParam注解来获取前端给后端发的email(要发送验证信息的邮箱)和type(种类)并调用userService中创建的sendEmail方法将两个参数注入

/**
* 邮箱验证接口
* @param email
* @param type
* @return
*/
//@RequestParam:?email=xxx&type=xxx
@ApiOperation("邮箱验证接口")
    @GetMapping("/email")
    public Result sendEmail(@RequestParam String email,@RequestParam String type){
    userService.sendEmail(email,type);
    return Result.success();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.Service层接口

void sendEmail(String email, String type);
  • 1

3.ServiceImpl实现接口编写邮箱发送验证码的逻辑,也就是sendEmail()方法,并将信息存入hashMap集合(缓存)中

 //key是code,value为当前的时间戳
    private static final Map<String,Long> CODE_MAP = new ConcurrentHashMap<>();

    @Autowired
    private EmailUtils emailUtils;


/**
* 邮箱验证逻辑
* @param email
* @param type
*/
@Override
    public void sendEmail(String email, String type) {
    String code = RandomUtil.randomNumbers(6);
    log.info("本次验证的code为:"+code);
    String context = "<b>尊敬的用户:</b><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好," +
        "xxxx提醒您本次的验证码是:<b>{}</b>," +
        "有效期5分钟。<br><br><br><br><br><br><br><b>xxxx欢迎您的注册~</b>";
    String html = StrUtil.format(context, code);
    if ("REGISTER".equals(type)){//注册
          //校验邮箱是否已经注册
            QueryWrapper<User> queryWrapper = new QueryWrapper<User>().eq("email",email);
            User user = getOne(queryWrapper);
            if (user != null){
                throw new ServiceException("此邮箱已被注册");
            }
        ThreadUtil.execAsync(()->{  //多线程执行异步请求,可以防止网络阻塞
            emailUtils.sendHtml("xxxx邮箱注册验证码",html,email);
        });
        CODE_MAP.put(code,System.currentTimeMillis());
    }
}
  • 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
  • 31
  • 32
  • 33

4.ServiceImpl中封装校验验证码的逻辑
首先传参网页上输入的验证码作为key在hashMap(缓存)中获取

  //key是code,value为当前的时间戳
    private static final Map<String,Long> CODE_MAP = new ConcurrentHashMap<>();
    private static final long TIME_IN_MS5 = 5 * 60 * 1000; //表示5分钟的毫秒数

/**
* 校验邮箱的封装方法
* @param emailCode
*/
private void validateEmail(String emailCode){
    //校验邮箱
    Long timestamp = CODE_MAP.get(emailCode);
if (timestamp == null){
    throw new ServiceException("请先验证邮箱或验证码不正确");
}
if (timestamp + TIME_IN_MS5 < System.currentTimeMillis()){//说明验证码过期了
    throw new ServiceException("验证码过期");
}
CODE_MAP.remove(emailCode); //验证完之后清楚缓存
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/196214
推荐阅读
相关标签
  

闽ICP备14008679号