脚本宝典收集整理的这篇文章主要介绍了Java开发完整的短信验证码功能,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
现代互联网项目中,很多场景下都需要使用一种叫做验证码的技术,常用的有图片验证码,滑块验证码,短信验证码等,本文章描述的就是短信验证码的一个使用教程,从0开始完成一个验证码功能的开发。
是不是看着导语很高大上!!! 我才不会说是因为最近不知道写啥才水的一篇文章 但是嘛,我要争取做到水文章也水的特别认真,让读者可以根据本文的教程实现验证码功能
// 仅供参考 根据业务去生成即可
// 生成验证码
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 6; i++) {
int random = (int) (Math.random() * 10);
builder.append(random);
}
String code = builder.toString();
// 其中的ResultEntity是我个人封装的一个返回结果 保存的是发送短信的结果 成功则存入Redis
// setRedisKeyValueRemoteWithTimeOut 是自己封装的一个方法 功能为存入redis并且设置超时时间
// 发送验证码到phoneNum 获取结果
ResultEntity<String> resultEntity = CrowdUtil.sendCodeShortMessage(
messageProperties.getHost(),
messageProperties.getPath(),
messageProperties.getMethod(),
phoneNum,
"注册",
messageProperties.getAppCode(),
messageProperties.getSmsSignId(),
messageProperties.getTemplateId());
if (ResultEntity.SUCCESS.equals(resultEntity.getResult())) {
// 验证码
String code = resultEntity.getData();
// 设置key
String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
// 如果成功则将验证码存入Redis 过期时间300秒 获取存入redis的结果
ResultEntity<String> saveCodeResultEntity = redisRemoteService.setRedisKeyValueRemoteWithTimeOut(key, code, 300, TimeUnit.SECONDS);
if (ResultEntity.SUCCESS.equals(saveCodeResultEntity.getResult())) {
return ResultEntity.successWithoutData();
} else {
return saveCodeResultEntity;
}
// 可以无视其中的一些拼接操作,这些拼接操作就是做一下标识,作为key。
// 核心是getRedisStringValueByKeyRemote方法 作用为获取Redis中的验证码
// 这里有一个注意事项就是验证码使用过一次后需要删除redis中的数据,避免二次验证造成的数据不安全。
// 获取手机号
String phoneNum = memberVO.getCardnum();
// 拼接redis中的key
String key = CrowdConstant.REDIS_CODE_PREFIX + phoneNum;
// 根据key查询redis 返回resultEntity 将value存入data
ResultEntity<String> redisResultEntity = redisRemoteService.getRedisStringValueByKeyRemote(key);
// 获取结果集
String result = redisResultEntity.getResult();
if (ResultEntity.FAILED.equals(result)) {
modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, redisResultEntity.getMessage());
return "member-reg";
}
// 获取redis的验证码
String redisCode = redisResultEntity.getData();
if (redisCode == null) {
modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_NOT_EXISTS);
return "member-reg";
}
// 获取输入的验证码
String code = memberVO.getCode();
if (!Objects.equals(redisCode, code)) {
modelMap.addAttribute(CrowdConstant.ATTR_NAME_MESSAGE, CrowdConstant.MESSAGE_CODE_FAILED);
return "member-reg";
}
// 删除redis中数据
redisRemoteService.removeRedisKeyRemote(key);
到这里我们验证码几乎就结束了,已经实现了流程,由于我的那个验证码套餐过期了,本人又十分贫穷,就没有测试样例啦,但是保证是可用的,前端调用方式直接一个Ajax请求调用发送验证码存储redis,然后在例如测试或登录的业务中,去匹配验证码即可。接下来给几点拓展,各位可以自己实现,然后可以在下面评论实现方式互相学习哦
全面发展,一专多能!!!!! 今天也是一个想进大厂的小菜鸡呢!!!!
以上是脚本宝典为你收集整理的Java开发完整的短信验证码功能全部内容,希望文章能够帮你解决Java开发完整的短信验证码功能所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。