我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java开发完整短信验证码功能的全过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java开发完整短信验证码功能的全过程

前言

现代互联网项目中,很多场景下都需要使用一种叫做验证码的技术,常用的有图片验证码,滑块验证码,短信验证码等,本文章描述的就是短信验证码的一个使用教程,从0开始完成一个验证码功能的开发。

闲扯

是不是看着导语很高大上!!!

我才不会说是因为最近不知道写啥才水的一篇文章

但是嘛,我要争取做到水文章也水的特别认真,让读者可以根据本文的教程实现验证码功能

使用技术

  • Java:所使用的后端技术
  • JSP:所使用的前端技术
  • 阿里云短信服务:发送短信
  • Redis:存储验证码 实现超时过期以及验证功能

所需知识储备

  • Java基础知识
  • Ajax基础
  • Redis基础

实现步骤

首先我们需要找一个提供短信服务的商户,随便在哪里找都一样,为了避免广告嫌疑我就不在此推荐了,购买商家的短信服务后会拿到一些参数,比如说请求地址,请求方式,token等,如下图所示

然后找到接口的调用样例,按照调用样例传相应的参数即可实现短信发送

这步没什么说的,就是调用API,完成这步之后,就可以发送短信了,当然这个是第一步,距离正式完成还差很远。
这里有一个小的细节,就是我们发送短信,其中这个验证码是我们自己生成的,然后以参数的形式传给接口,所以这里的验证码需要我们自己产生 贴一段产生验证码的代码


// 仅供参考 根据业务去生成即可
	// 生成验证码
	StringBuilder builder = new StringBuilder();
	 for (int i = 0; i < 6; i++) {
	     int random = (int) (Math.random() * 10);
	     builder.append(random);
	 }
	 String code = builder.toString();

第二步要做的操作就是要将第一步发送的验证码,如果发送成功了的话,我们要将该验证码保存起来,方便后续的验证,本人这里使用了SpringBoot整合Redis,直接使用RedisTemplente实现的,和原生实现是类似的,就是将验证码和手机号存入Redis。


	 // 其中的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;
	     }

第三步实现短信验证码的验证

这步骤实现的功能就是验证短信验证码是否匹配,这步骤核心操作就是将验证码从Redis中取出来,和前端传过来的数据进行比对,贴代码


		// 可以无视其中的一些拼接操作,这些拼接操作就是做一下标识,作为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,然后在例如测试或登录的业务中,去匹配验证码即可。接下来给几点拓展,各位可以自己实现

  1. 实现控制单手机号一天只能发送三条消息。
  2. 实现控制单ip一天只能发送是三条消息
  3. 实现消息60秒不能重复发送

总结

到此这篇关于Java开发完整短信验证码功能的文章就介绍到这了,更多相关Java短信验证码功能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java开发完整短信验证码功能的全过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何实现发送短信验证码功能

小编给大家分享一下Java如何实现发送短信验证码功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在J
2023-05-30

Android开发工程中集成mob短信验证码功能的方法

一.前言 现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在是有点奢侈,很好的是mob为我们提供了免费的短信验证码服务功能,我不是打广告,的确觉得这项服务很不
2022-06-06

怎么用java+maven实现发送短信验证码功能

这篇文章主要介绍“怎么用java+maven实现发送短信验证码功能”,在日常操作中,相信很多人在怎么用java+maven实现发送短信验证码功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用java+m
2023-06-02

java怎么实现注册的短信验证码功能

本篇内容介绍了“java怎么实现注册的短信验证码功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!短信验证码实现流程1、构造手机验证码,生成
2023-06-02

Springboot实现阿里云通信短信服务有关短信验证码的发送功能

前言短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。现在市面上的短信服务平台有很多。大家在选择的时候未免会有些不好抉择。本人建议选择短信服务商应遵循以下几点: 服务商知名度高,业务
2023-05-31

Android开发中通过手机号+短信验证码登录的实例代码

首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了。activi
2023-05-31

异步协程开发技巧:实现高效的短信验证码发送

在移动互联网时代,短信验证码已成为了用户注册、登录以及找回密码等操作的必备步骤。然而,短信验证码的发送一直以来都是开发中的一大难点,尤其是在高并发场景下,往往会导致系统性能的下降。为了解决这一问题,本文介绍了异步协程开发技巧,并提供了具体的
异步协程开发技巧:实现高效的短信验证码发送
2023-12-09

在Web项目中手机短信验证码实现的全过程记录

前言最近在做远程智能水表管理系统这个过程有一个功能是在注册页面可以使用手机注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下。下面话不多说了,来一起看看详细的介绍吧。短信验证码实现流程 1、构造手机验证码:使用r
2023-05-30

Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能

这篇文章主要讲解了“Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能
2023-06-02

java web开发之servlet图形验证码功能的实现

一 验证码的由来在web项目开发中,为了防止部分人使用自动工具(如:自动注册机)等进行批量的数据处理,在不同的功能节点部分,添加了验证码进行验证,达到对自动软件的屏蔽效果最经典的应用如:网站注册图形验证码;接下来,通过java技术,结合se
2023-05-30

PHP开发买菜系统的用户手机验证与短信通知功能实现方法

随着互联网和移动互联网的普及,电商逐渐成为消费者购买生活必需品的首选方式。在社区生鲜电商领域,越来越多的消费者选择通过APP或网站下单购买生鲜菜品。对于这些社区生鲜电商来说,实现用户手机验证和短信通知功能是非常关键的,这不仅可以加强用户安全
PHP开发买菜系统的用户手机验证与短信通知功能实现方法
2023-11-01

Java Web开发过程中登陆模块的验证码的实现方式总结

验证码及它的作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定注册用户用
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录