Spring boot短信验证登录
一、短信验证码业务
我用的是第三平台的短信服务,当用户点击发送验证码,会调用短信平台接口,从而给手机发验证码。流程如下:
c
首先需要工具类,来发送验证码
public class DXMessageUtil {public static Boolean sendMessage(Long phone, String code){int appId = xxxxxx;String appKey = "xxxxxxxxxxxxxxxxxxx";String phoneNumber = String.valueOf(phone);int templateId = xxxx; // 短信正文模板String smsSign = "xxxx"; //签名内容//可能获取失败,所以放在try-chach中try {String[] params = {code};//传入验证码和时间数组,根据短信模板自行调整log.info("入参电话:"+phoneNumber);log.info("入参验证码:"+code);//创建短信调用接口 传入刚刚的应用id 和 keySmsSingleSender sender = new SmsSingleSender(appId, appKey);//调用方法发送短信 传入国家码 电话号码 模板id 模板参数 签名 扩展码为空 返回参数为空SmsSingleSenderResult result = sender.sendWithParam("86", phoneNumber, templateId,params,smsSign,"","");} catch(HTTPException e) {// HTTP响应码错误log.info("HTTP响应码错误!");e.printStackTrace();return false;} catch(JSONException e) {// json解析错误log.info("json解析错误!");e.printStackTrace();return false;} catch(IOException e) {// 网络IO错误log.info("网络IO错误!");e.printStackTrace();return false;}return true;}//随机生成6位短信验证码的函数public static String random(){String x= String.valueOf((int)((Math.random()*9+1)* Math.pow(10,6-1)));return x;}//public static boolean isBlank(String str) {int strLen;if (str == null || (strLen = str.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if ((Character.isWhitespace(str.charAt(i)) == false)) {return false;}}return true;}
}
二、短信验证登录业务
接下来我们看下登录的流程
登录的代码:
@RequestMapping("getPhoneCode")public ResultJson getPhoneCode(@RequestBody SysUserNewVo sysUserNewVo){Long phone = sysUserNewVo.getPhone();log.info("getPhoneCode入参:"+phone);//1、判断手机号是否为空if(StringUtils.isEmpty("phone")){return ResultJson.error("手机号不能为空!");}//2、判断手机号是否符合格式(使用正则表达式实现)String regex = "^((11[0-9])|(12[0-9])|(13[0-9])|(14[0-9])|(15([0-9]))|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$";if (!Pattern.matches(regex, String.valueOf(phone))) {return ResultJson.error("手机号格式不正确!");}//3、将验证码保存至服务器RedisString code = DXMessageUtil.random();
// redisUtil.set("phoneCode",code,60*10);redisUtil.setex("phoneCode",code,60L);log.info("出参:生成的验证码:"+redisUtil.get("phoneCode"));//4、发送短信验证码if(!DXMessageUtil.sendMessage(phone,String.valueOf(redisUtil.get("phoneCode")))){return ResultJson.error("验证码发送失败!");}return ResultJson.ok("验证码发送成功!");}
首先是进行判断手机号是否为空、格式是否正确,然后将验证码存入redis中
5@RequestMapping("phoneLogin")public ResultJson phoneLogin(@RequestBody SysUserNewVo sysUserNewVo){Long phone = sysUserNewVo.getPhone();String code = sysUserNewVo.getCode();//1、判断手机号是否为空if(phone.equals(null)){return ResultJson.error("手机号不能为空!");}//2、判断手机号格式是否正确String regex = "^((11[0-9])|(12[0-9])|(13[0-9])|(14[0-9])|(15([0-9]))|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\\d{8}$";if (!Pattern.matches(regex, String.valueOf(phone))) {return ResultJson.error("手机号格式不正确!");}//3、判断距离上次发送该类型的验证码是否超过5分钟,失效String oldCode = String.valueOf(redisUtil.get("phoneCode"));log.info("验证码发送超时进行测试oldCode:"+oldCode);//if(!DXMessageUtil.isBlank(oldCode)){if((String.valueOf(redisUtil.get("phoneCode")))==null){return ResultJson.error("验证码已失效!");}//4、判断用户是否存在SysUserNewVo userInfo = loginService.getUserInfoByPhone(phone);if(userInfo==null){return ResultJson.error("不存在此用户!");}String codeRedis = String.valueOf(redisUtil.get("phoneCode"));log.info("pLogin的出参code: "+code+"; codeRedis:"+codeRedis+"; phone: "+phone);SysUserNewVo x = loginService.phoneLogin(phone,code,codeRedis);if(x!=null){String token = JwtUtil.createToken(x.getAccount());x.setToken(token);List<SysRole> roleList = sysRoleService.getRoleById(x.getId());x.setRoleList(roleList);redisUtil.set("SysUser",JSON.toJSONString(x));SysUserNewVo xxx = JSON.parseObject(String.valueOf(redisUtil.get("SysUser")), SysUserNewVo.class);redisUtil.set("sysUserAccount",x.getAccount());return ResultJson.ok(x);}return ResultJson.error("验证码输入错误!");}
然后判断验证码是否失效,我目前是设置的5分钟,在然后判断用户是否存在。登陆成功后,会将用户的信息存入到token里
Spring boot短信验证登录相关推荐
- 5.Spring Security 短信验证码登录
Spring Security 短信验证码登录 在 Spring Security 添加图形验证码一节中,我们已经实现了基于 Spring Boot + Spring Security 的账号密码登录 ...
- Spring Security 短信验证码登录(5)
在Spring Security添加图形验证码中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能.时下另一种非常常见的网站登录方式为 ...
- 七丶青龙nvjdc部署教程+短信验证登录对接傻妞
青龙nvjdc部署教程+短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流:10 ...
- 工厂如何实现无线wifi短信验证登录?工厂上网实名认证系统
工厂如何实现无线wifi短信验证登录?工厂上网实名认证系统 工厂提供公共的无线wifi上网服务,需对用户进行实名认证.手机短信实名认证以其用户体验.综合成本等优势,成为工厂无线上网认证的首选方案. 一 ...
- Vue与Node.js实现手机短信验证登录
手机短信使用的第三方平台是联容云,注册就送8块钱体验费,足够自己用用了,注册完自己建一个应用就能拿到需要使用的配置了,如图 注册完之后1就可以使用了. Node.js后端使用了Express框架 &q ...
- 秒滴云短信验证登录小demo
短信验证登录demo <a class="click_login_head" data-href="/member" data-method=" ...
- Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五)
Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五) 关于之前的功能实现可以从制作简易新闻App导航篇中查看 因为这篇是写了有一段时间的博客,所以这篇(包括后面的简易新 ...
- Springboot实现短信验证登录
一.介绍 使用短信验证登录也是现在实际项目中普遍使用的一种登录, 二.实际的操作流程 1.用户在前端页面输入手机号码之后,点击发送验证码 2.前端将手机号传给后端 3.后端生成一个6为的随机数通过短信 ...
- java WEB调用秒嘀科技短信验证接口(实现短信验证登录)
java WEB调用秒嘀科技短信验证接口(实现短信验证登录) 前言 注册秒嘀云账号 登录秒嘀云官网 代码 前言 短信验证登咱就不多说了,为什么推荐用秒嘀的呢,应为他会送你10元钱,对于新手来说10元钱 ...
最新文章
- arduino点阵声音频谱_基于Arduino和频谱分析的LED音乐课节拍器
- ICCV 2021 Best Paper | Swin Transformer何以屠榜各大CV任务!
- 架构师之路 — 软件架构 — 软件版本定义
- 腾讯面试题:一条SQL语句执行得很慢的原因有哪些?
- 2021届定远三中高考成绩查询,定远各中学高考喜报!
- 监听浏览器是否被缩放 - 案例篇
- spdlog linux编译出错,Linux下编写Makefile引入第三方库
- html实现多窗口同时显示,如何使webstorm同时显示多个窗口?
- 集成spring框架的web.xml
- ocp最新题库之052新题带答案整理-36题
- MicroPython-GPRS教程之TPYBoardv702GPRS功能测试
- c语言调用库函数,C语言库函数调用文件
- python做马尔科夫模型预测法_Python 3 爬虫学习笔记 8 马尔科夫模型
- Linux team多网卡绑定
- 《和沐阳一起学POST+JS逆向》视频教程
- 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
- NRF51822蓝牙服务(9)——动态修改设备的名称
- autojs网络验证,权朗网络验证源码
- iOS App内测分发的步骤解析
- 详解小程序的蓝牙模块