赞
踩
如果喜欢我的编程笔记可以关注我的微信公众号【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();
}
2.Service层接口
void sendEmail(String email, String type);
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> 您好," +
"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());
}
}
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); //验证完之后清楚缓存
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。