视频直播系统源码,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 分钟有效的更多相关文章

  1. 如何理解直播APP源码开发中的音视频同步

    视频 直播APP源码的视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉. 但是在实际应用中,并不是每一帧都是完整的画面,因为如果直 ...

  2. 直播APP源码是如何实现音视频同步的

    1.  音视频同步原理 1)时间戳 直播APP源码音视频同步主要用于在音视频流的播放过程中,让同一时刻录制的声音和图像在播放的时候尽可能的在同一个时间输出. 解决直播APP源码音视频同步问题的最佳方案 ...

  3. 教程视频、项目源码、全部干货【微信小程序、React Native、Java、iOS、数据结构】

    把我收藏多年的教学视频.项目源码分享给大家,大神就可以忽略了,很多东西都是基础性的,都是期初学习阶段收集的东西. 微信小程序(入门级,有web前端基础的人群): 链接: https://pan.bai ...

  4. Java汽车租赁系统[源码+数据库]

    系统名称 Java汽车租赁系统   (源码在文末) 系统概要 汽车租赁系统总共分为两个大的模块,分别是系统模块和业务模块.其中系统模块和业务模块底下又有其子模块. 功能模块 一.业务模块 1.客户管理 ...

  5. PHP直播平台源码搭建教程

    直播源码市场火爆,但是PHP直播平台源码的搭建过程较为复杂,本文就简单为大家概述一下直播的实现过程以及PHP直播平台源码是如何搭建的. 一.直播的定义 如今PHP直播平台源码绝大部分情况下是指在现场架 ...

  6. Android系统架构与系统源码目录

    前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...

  7. 将Android系统源码导入ecplise

    Android系统源码中带有个IDE的配置文件,目录为:development/ide/ 如果要用eclipse导入查看系统源码,则将development/ide/eclipse/.classpat ...

  8. 安卓系统源码编译系列(六)——单独编译内置浏览器WebView教程

    原文                   http://blog.csdn.net/zhaoxy_thu/article/details/18883015                 本文主要对从 ...

  9. 关于查看Android系统源码【Written By KillerLegend】

    可能你会想下载Android系统源码,但是我不知道你会看多少系统的源码,如果你对源码只是偶尔看一次的话,推荐你在线看Android的系统源码,下面提供几种查看android系统源码的方法. 1:打开这 ...

  10. 一点公益二码公益开发模式系统源码App

    写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通 ...

随机推荐

  1. Docker全方位攻略与自动化运维

    介绍 Docker Registry(Docker注册中心)是一个管理Docker容器镜像存储和交付的应用程序.注册中心集中容器镜像并减少开发人员的构建时间.Docker镜像通过虚拟化保证相同的运行环 ...

  2. JZOJ 4318. 【NOIP2015模拟11.5】俄罗斯套娃

    题目大意 求逆序对个数小于等于 \(k\) 的排列数 解析 已经做过很多次了,经典得不能再经典的问题 注意本题很卡空间,要用滚动数组 \(Code\) #include<cstdio> u ...

  3. BI工具术语表大全:从字母A-Z全面收录

    谈到商业智能行业,变革是不可避免的.为了跟上步伐,各种各样的BI 解决方案正在快速迭代更新,以满足企业的数字化需求,那么市场上BI 工具种类繁杂,到底如何选择适合功能全面.满足自己企业运转情况的.合适 ...

  4. Balanced Team

    https://vjudge.net/problem/CodeForces-1133C 题意:在数组中找出一段  每两个元素差值不大于5的这段元素个数的最大值. 1 #include <iost ...

  5. 代码随想录算法训练营day04 | leetcode

    基础知识 记录一下栈实现及操作 public class ArrayDequeStack { public void main() { ArrayDeque stack = new ArrayDequ ...

  6. 【故障公告】Kubernetes 集群节点宕机造成博客站点故障

    非常抱歉!今天 18:40-18:55 左右 Kubernetes 集群一台高配节点突然宕机,造成博客站点故障,访问时出现 502 Bad Gateway,由此给您带来麻烦麻烦,请您谅解. 发现故障并 ...

  7. Ubuntu命令安装默认支持的Qt5版本

    1.前置依赖 sudo apt install build-essential sudo apt install cmake 2.只安装默认的Qt模块 # 安装默认SDK # Ubuntu18.04中 ...

  8. 手算推导BP神经网络

    一.神经元 下图的蓝色区域被称为一个"感知机"(Perceptron), 感知机是对信息进行编码.压缩.集成.融合的计算机智能接口系统. 说白了,就是在输入端输入X1~X7这7个输 ...

  9. grafana二次开发环境配置(windows10)

    安装说明: 由于在windows环境安装grafana,第一次安装的是8.2.2版本,后端编译时一直报错,故安装了8.1.7 该错误在 grafana 的源码问题中可以找到,但针对 windows 暂 ...

  10. C语言中static关键字用法

    概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护. 在程序中使用static 变量 1. 局部变量 普通局部变量是再熟悉不过的变量了,在任何一个函数内 ...