从零开始搭建仿抖音短视频APP--开发用户业务模块(1)
目录
手机号——一键注册登录流程
构建流程图
用户登录流程
手机号一键注册登录流程图
腾讯云短信
SpringBoot集成腾讯云短信
完善发送短信接口
手机号——一键注册登录流程
构建流程图
用户登录流程
前后端都需要加上60s限制,因为有些用户可能会跳过前端,直接请求我们的后端。
手机号一键注册登录流程图
传入的参数对应的就是我们的输入域。
腾讯云短信
我们这里是需要有自己的一个公众号的。
SpringBoot集成腾讯云短信
我们首先要集成sdk,sdk是一个我们发送短信的jar包的依赖:
版本号这里是第三方的云厂商依赖,是锁死的,我们不会去做维护也不会去管理。
接着要去配置密钥:
创建对应的一个映射类,来获取对应的值:
package com.imooc.utils;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component
@Data
@PropertySource("classpath:tencentcloud.properties")
@ConfigurationProperties(prefix = "tencent.cloud")
public class TencentCloudProperties {private String secretId;private String secretKey;
}
@PropertySource("classpath:tencentcloud.properties")这里是指资源文件映射的内容,目录:
发送短信的代码:
package com.imooc.utils;import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class SMSUtils {@Autowiredprivate TencentCloudProperties tencentCloudProperties;public void sendSMS(String phone, String code) throws Exception {try {/* 必要步骤:* 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。* 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。* 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,* 以免泄露密钥对危及你的财产安全。* CAM密匙查询获取: https://console.cloud.tencent.com/cam/capi*/Credential cred = new Credential(tencentCloudProperties.getSecretId(),tencentCloudProperties.getSecretKey());// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();// httpProfile.setReqMethod("POST"); // 默认使用POST/* SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务* 则必须手动指定域名,例如sms的上海金融区域名: sms.ap-shanghai-fsi.tencentcloudapi.com */httpProfile.setEndpoint("sms.tencentcloudapi.com");// 实例化一个client选项ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的SmsClient client = new SmsClient(cred, "ap-nanjing", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象SendSmsRequest req = new SendSmsRequest();String[] phoneNumberSet1 = {"+86" + phone};//电话号码req.setPhoneNumberSet(phoneNumberSet1);req.setSmsSdkAppId(" "); // 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppIdreq.setSignName(" "); // 签名req.setTemplateId(" "); // 模板id:必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看/* 模板参数(自定义占位变量): 若无模板参数,则设置为空 */String[] templateParamSet1 = {code};req.setTemplateParamSet(templateParamSet1);// 返回的resp是一个SendSmsResponse的实例,与请求对象对应SendSmsResponse resp = client.SendSms(req);// 输出json格式的字符串回包
// System.out.println(SendSmsResponse.toJsonString(resp));} catch (TencentCloudSDKException e) {System.out.println(e.toString());}}// public static void main(String[] args) {
// try {
// new SMSUtils().sendSMS("18812345612", "7896");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
其中短信应用id,签名,模板id都需要根据自己的填写。
最后可以做一个测试:
运行会报错,因为所处的是一个springboot环境。
我们在HelloController中测试:
在接口文档中进行调试:
这里已经可以成功的进行短信发送了。
完善发送短信接口
接下来我们要整合我们的前端,在前端输入手机号,获得我们的验证码:
首先创建一个PassportController通行证Controller:
注:我们这里的路由地址要与前端匹配,并且要看清楚用的什么方法
为了获得用户ip,我们要在添加一个获得ip的工具类,
package com.imooc.controller;import com.imooc.grace.result.GraceJSONResult;
import com.imooc.model.Stu;
import com.imooc.utils.IPUtil;
import com.imooc.utils.SMSUtils;
import com.tencentcloudapi.ie.v20200304.models.MuxInfo;
import io.netty.util.internal.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;@Slf4j
@Api(tags = "PassportController 通行证接口模块")
@RequestMapping("passport")
@RestController
public class PassportController {@Autowiredprivate SMSUtils smsUtils;@PostMapping("getSMSCode")public Object getSMSCode(@RequestParam String mobile,HttpServletRequest request) throws Exception {
// 判断是否为空,为空什么信息都不返回if(StringUtils.isBlank(mobile)){return GraceJSONResult.ok();}
////TODO 获取用户idString userIp = IPUtil.getRequestIp(request);//TODO 根据用户ip进行限制,限制用户在60s之内只能获得一次验证码// 获取6位随机验证码String code = (int)((Math.random()*9+1)*100000)+"";smsUtils.sendSMS(mobile,code);log.info(code);//TODO 把验证码放入redis中,用于后续验证return GraceJSONResult.ok();}}
检查前后端端口是否一致,接着重新启动,在我们的基座中去获取短信:
在我们的控制台中会打印出来一条短信:
这里就完成了我们的集成。
从零开始搭建仿抖音短视频APP--开发用户业务模块(1)相关推荐
- 从零开始搭建仿抖音短视频APP-开发用户业务模块(3)
项目持续更新中: 仿抖音短视频APP专栏 目录 注册登录-BO接受前端参数验证 对BO校验进行统一封装 开发用户是否存在 开发创建用户Service 实现短信注册登录与分布式会话 注册登录-BO接受前 ...
- 从零开始搭建仿抖音短视频APP-开发用户业务模块(2)
项目持续创作中: 仿抖音短视频APP项目专栏 目录 安装redis6.0缓存中间件 整合Redis并存储验证码 拦截器限制60s短信发送 优雅异常封装返回拦截器异常 安装redis6.0缓存中间件 需 ...
- 从零开始搭建仿抖音短视频APP--开发用户业务模块(4)
项目持续更新中: 仿抖音短视频APP专栏 目录 用户退出登录 开发查询用户信息接口 统一封装修改用户信息(一) 统一封装修改用户信息(二) 用户退出登录 此时还没有实现退出登录. 在前端中,我们找到l ...
- 从零开始搭建仿抖音短视频APP-后端消息业务模块开发(2)-基础版完结篇
项目持续更新中: 仿抖音短视频APP专栏 目录 系统消息入库保存 MongoDB分页查询系统消息列表 删除系统消息 系统消息入库保存 这里还剩下最后一个点赞评论没有完成 这里如果点赞了你的评论,你们视 ...
- 从零开始搭建仿抖音短视频APP-构建后端项目
项目持续创作中... 仿抖音短视频APP项目专栏 目录 聚合工程 构建父工程 构建子工程 构建接口工程并且暴露api接口 优雅Restful相应封装 Lombok与多环境profile 数 ...
- 从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)
项目持续更新中: 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 保存系统消息到MongoDB 我们把m ...
- 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(2)
项目持续更新中: 仿抖音短视频APP 目录 实现数据层mybatis自定义mapper与sql 查询短视频列表api 实现下拉刷新和分页功能 实现数据层mybatis自定义mapper与sql 在数据 ...
- 从零开始搭建仿抖音短视频APP-后端开发短视频业务模块(3)
项目持续更新中: 仿抖音短视频APP专栏 目录 视频详情页展示的数据层实现 视频详情页展示的api实现 短视频下载.复制连接.二维码展示 视频保存到相册 复制链接 二维码展示 实现转为私密或公开视频 ...
- 从零开始搭建仿抖音短视频APP--后端开发粉丝业务模块(3)
项目持续创作中: 仿抖音短视频APP专栏 目录 实现用户点赞视频 用户取消点赞 用户是否点赞视频的判断 实现用户点赞视频 用户在点赞我们的视频后,我们需要去实现一些相关的业务, 这里需要对应到数据库的 ...
最新文章
- software reporter tool占用高_广安市园林车载高射程雾炮机厂家供货
- RBF(Radial Basis Function Network)+径向基网络
- ModuleNotFoundError: No module named 'sklearn.cross_validation'
- [转]获取xml节点值和属性值(兼容ie和firefox)
- Android获取当前位置,推荐使用百度地图SDK获取位置
- mysql 多项式_mysql主从复制原理及实现
- C 温故知新 之 指针:函数指针变量、指针型函数
- Java基础--说集合框架
- 数据库实例: STOREBOOK 用户
- (cocos2dx-3.3)3D坐标系
- Js设置Cookie
- 手机html设计规范,终于晓得手机网站设计尺寸规范
- Linux裸机开发|LCD背光调节实验
- 深度学习-8.实践方法论
- 期货股票自动交易下单接口怎么执行策略函数?
- Top 7大开源数据可视化分析工具!
- 查看ssh和防火墙的状态 开启ssh服务 关闭防火墙
- 2022年,元宇宙是否能结束争议?
- 音响系统相关技术术语解释大全
- ios 安卓 java_java转android或ios?