视频直播系统源码,java 随机验证码 、10 分钟有效
视频直播系统源码,java 随机验证码 、10 分钟有效
1.首先创建一个vo类存放我们验证码相关信息。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @Author Lxq
* @Date 2020/12/7 17:30
* @Version 1.0
* <p>
* 存放验证码相关内容,这个对象是放在redis中
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VerifyCodeVO implements Serializable {
/**
* 验证码
*/
private Integer verifyCode;
/**
* 发送验证码的手机号
*/
private String phoneNumber;
/**
* 最近成功发送时间
*/
private Date lastSendTime;
/**
* 可用次数
*/
private Integer availableTimes;
}
2.当前时间与晚上十二点的秒差
/**
* 当前时间与晚上十二点的秒差
*
* @return
*/
private Long nowTo12ClockTime() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.MILLISECOND, 0);
//当前时间与晚上十二点的秒差
return (calendar.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
3.发送验证码的具体方法
@Override
public void sendVerificationCode(String phoneNumber) {
if (phoneNumber == null) {
throw new CustomException("手机号码不能为空!");
}
// 从redis中获取手机号码对应对象信息
VerifyCodeVO verifyCodeVO = redisUtils.get(phoneNumber, VerifyCodeVO.class);
if (verifyCodeVO != null) {
long lastSendTime = verifyCodeVO.getLastSendTime().getTime();
long now = System.currentTimeMillis();
if ((now - lastSendTime) / 1000 < 60) {
throw new CustomException("请不要频繁获取验证码!");
}
Integer availableTimes = verifyCodeVO.getAvailableTimes();
if (availableTimes.equals(0)) {
throw new CustomException("今日验证码次数已使用完毕!");
}
// 次数减一
verifyCodeVO.setAvailableTimes(verifyCodeVO.getAvailableTimes() - 1);
// 重新生成新验证码
int random = (int) ((Math.random() * 9 + 1) * 100000);
verifyCodeVO.setVerifyCode(random);
verifyCodeVO.setLastSendTime(new Date());
redisUtils.set(phoneNumber, verifyCodeVO, nowTo12ClockTime());
// 异步发送短信
String id = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getId();
Integer parameters = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getParameters();
AsyncManager.me().ttlExecute(AsyncMessageFactory.sendBusinessSms(id, new String[]{"+86" + phoneNumber}, new String[]{String.valueOf(random)}, parameters));
} else {
int random = (int) ((Math.random() * 9 + 1) * 100000);
VerifyCodeVO vc = new VerifyCodeVO();
vc.setPhoneNumber(phoneNumber);
vc.setVerifyCode(random);
vc.setLastSendTime(new Date());
vc.setAvailableTimes(9);
redisUtils.set(phoneNumber, vc, nowTo12ClockTime());
// 模板ID
String id = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getId();
Integer parameters = ArpSmsTemplateEnum.APP_DATA_VERIFICATION_CODE.getParameters();
AsyncManager.me().ttlExecute(AsyncMessageFactory.sendBusinessSms(id, new String[]{"+86" + phoneNumber}, new String[]{String.valueOf(random)}, parameters));
}
}
备注:短信接口是调用腾讯云接口,自行解决
4.接收验证码接口
@Override
public Integer getVerificationCode(String phoneNumber) {
VerifyCodeVO verifyCodeVO = redisUtils.get(phoneNumber, VerifyCodeVO.class);
if (verifyCodeVO == null) {
throw new CustomException("请先获取手机验证码!");
}
long currentTimeMillis = System.currentTimeMillis();
long lastTime = verifyCodeVO.getLastSendTime().getTime();
// 10 分钟有效期
if ((lastTime + (10 * 60 * 1000)) < currentTimeMillis) {
throw new CustomException("验证码已过期,请重新获取!");
}
return verifyCodeVO.getVerifyCode();
}
以上就是视频直播系统源码,java 随机验证码 、10 分钟有效, 更多内容欢迎关注之后的文章
视频直播系统源码,java 随机验证码 、10 分钟有效的更多相关文章
- 如何理解直播APP源码开发中的音视频同步
视频 直播APP源码的视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉. 但是在实际应用中,并不是每一帧都是完整的画面,因为如果直 ...
- 直播APP源码是如何实现音视频同步的
1. 音视频同步原理 1)时间戳 直播APP源码音视频同步主要用于在音视频流的播放过程中,让同一时刻录制的声音和图像在播放的时候尽可能的在同一个时间输出. 解决直播APP源码音视频同步问题的最佳方案 ...
- 教程视频、项目源码、全部干货【微信小程序、React Native、Java、iOS、数据结构】
把我收藏多年的教学视频.项目源码分享给大家,大神就可以忽略了,很多东西都是基础性的,都是期初学习阶段收集的东西. 微信小程序(入门级,有web前端基础的人群): 链接: https://pan.bai ...
- Java汽车租赁系统[源码+数据库]
系统名称 Java汽车租赁系统 (源码在文末) 系统概要 汽车租赁系统总共分为两个大的模块,分别是系统模块和业务模块.其中系统模块和业务模块底下又有其子模块. 功能模块 一.业务模块 1.客户管理 ...
- PHP直播平台源码搭建教程
直播源码市场火爆,但是PHP直播平台源码的搭建过程较为复杂,本文就简单为大家概述一下直播的实现过程以及PHP直播平台源码是如何搭建的. 一.直播的定义 如今PHP直播平台源码绝大部分情况下是指在现场架 ...
- Android系统架构与系统源码目录
前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...
- 将Android系统源码导入ecplise
Android系统源码中带有个IDE的配置文件,目录为:development/ide/ 如果要用eclipse导入查看系统源码,则将development/ide/eclipse/.classpat ...
- 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程
原文 http://blog.csdn.net/zhaoxy_thu/article/details/18883015 本文主要对从 ...
- 关于查看Android系统源码【Written By KillerLegend】
可能你会想下载Android系统源码,但是我不知道你会看多少系统的源码,如果你对源码只是偶尔看一次的话,推荐你在线看Android的系统源码,下面提供几种查看android系统源码的方法. 1:打开这 ...
- 一点公益二码公益开发模式系统源码App
写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通 ...
随机推荐
- ICSharpCode.SharpZipLib.Zip 解析时报错System.NotSupportedException: No data is available for encoding 936
分析原因 利用ICSharpCode.SharpZipLib.Zip进行APK解析时,因为APK内编译的名称为中文,查询微软开发文档936为gb2312中文编码 微软开发文档地址https://doc ...
- 微信小程序 添加域名
1.不校验合法域名.web-view (业务域名).TLS版本以及 HTTPS证书 2.小程序上的请求=>服务器的根地址=>都需要添加微信公众平台(否则会无法发送请求,导致代码报错)
- bat脚本登陆ftp服务器
用bat脚本登录ftp服务器,下载指定文件. 第一次脚本,有问题,你发现了么? 由于每个">>"重定向符号之前都习惯用空格(python style),导致写道ftp. ...
- [NOI Online 提高组]冒泡排序
题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) ...
- Ubuntu20.04桌面系统快速上手教程
转载csdn:ChunKai93 https://blog.csdn.net/iamzhoujunjia/article/details/105349441
- .NET依赖注入之一个接口多个实现
前言 最近又在项目中碰到需要将原本单实现的接口改造成多个实现的场景,这里记录一下常见的几种改法. 假设已经存在如下接口ICustomService和其实现CustomService,由于只有一种实现, ...
- pdf地址展示成Swiper轮播方式-复制链接
1.安装vue-pdf插件,swiper插件.clipboard npm install vue-pdf -snpm install swiper -Snpm install clipborad -S ...
- 代码随想录-day2
哈希表 基础知识 哈希表和链表都是属于基础数据结构的一种,都是必须掌握牢靠的知识. 哈希表是根据关键码的值而直接进行访问的数据结构. 简单来说就是使用数据得到的哈希值来作为哈希表的key用于获取数据. ...
- Angular 发布IIS
1.IIS服务器需要安装插件 安装 Url https://www.iis.net/downloads/microsoft/url-rewrite 2.修改配置 在src目录下,添加 web.conf ...
- Git多分支 远程仓库 协同开发以及解决冲突
目录 一.Git多分支及远程仓库 1.Git多分支 2.正常密码链接远程仓库 3.ssh公钥私钥方式链接远程仓库 三.协同开发及解决冲突 1.协同开发 2.解决冲突 四.线上分支合并及远程仓库回滚 1 ...