一、短信验证码业务

我用的是第三平台的短信服务,当用户点击发送验证码,会调用短信平台接口,从而给手机发验证码。流程如下:

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短信验证登录相关推荐

  1. 5.Spring Security 短信验证码登录

    Spring Security 短信验证码登录 在 Spring Security 添加图形验证码一节中,我们已经实现了基于 Spring Boot + Spring Security 的账号密码登录 ...

  2. Spring Security 短信验证码登录(5)

    在Spring Security添加图形验证码中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能.时下另一种非常常见的网站登录方式为 ...

  3. 七丶青龙nvjdc部署教程+短信验证登录对接傻妞

    青龙nvjdc部署教程+短信验证登录对接傻妞Nolanjdc 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 青龙面板安装教程 傻妞机器人安装教程 XDD安装教程 QQ交流:10 ...

  4. 工厂如何实现无线wifi短信验证登录?工厂上网实名认证系统

    工厂如何实现无线wifi短信验证登录?工厂上网实名认证系统 工厂提供公共的无线wifi上网服务,需对用户进行实名认证.手机短信实名认证以其用户体验.综合成本等优势,成为工厂无线上网认证的首选方案. 一 ...

  5. Vue与Node.js实现手机短信验证登录

    手机短信使用的第三方平台是联容云,注册就送8块钱体验费,足够自己用用了,注册完自己建一个应用就能拿到需要使用的配置了,如图 注册完之后1就可以使用了. Node.js后端使用了Express框架 &q ...

  6. 秒滴云短信验证登录小demo

    短信验证登录demo <a class="click_login_head" data-href="/member" data-method=" ...

  7. Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五)

    Android实现第三方Mob短信验证登录以及手机号显示和修改用户名(简易新闻 五) 关于之前的功能实现可以从制作简易新闻App导航篇中查看 因为这篇是写了有一段时间的博客,所以这篇(包括后面的简易新 ...

  8. Springboot实现短信验证登录

    一.介绍 使用短信验证登录也是现在实际项目中普遍使用的一种登录, 二.实际的操作流程 1.用户在前端页面输入手机号码之后,点击发送验证码 2.前端将手机号传给后端 3.后端生成一个6为的随机数通过短信 ...

  9. java WEB调用秒嘀科技短信验证接口(实现短信验证登录)

    java WEB调用秒嘀科技短信验证接口(实现短信验证登录) 前言 注册秒嘀云账号 登录秒嘀云官网 代码 前言 短信验证登咱就不多说了,为什么推荐用秒嘀的呢,应为他会送你10元钱,对于新手来说10元钱 ...

最新文章

  1. arduino点阵声音频谱_基于Arduino和频谱分析的LED音乐课节拍器
  2. ICCV 2021 Best Paper | Swin Transformer何以屠榜各大CV任务!
  3. 架构师之路 — 软件架构 — 软件版本定义
  4. 腾讯面试题:一条SQL语句执行得很慢的原因有哪些?
  5. 2021届定远三中高考成绩查询,定远各中学高考喜报!
  6. 监听浏览器是否被缩放 - 案例篇
  7. spdlog linux编译出错,Linux下编写Makefile引入第三方库
  8. html实现多窗口同时显示,如何使webstorm同时显示多个窗口?
  9. 集成spring框架的web.xml
  10. ocp最新题库之052新题带答案整理-36题
  11. MicroPython-GPRS教程之TPYBoardv702GPRS功能测试
  12. c语言调用库函数,C语言库函数调用文件
  13. python做马尔科夫模型预测法_Python 3 爬虫学习笔记 8 马尔科夫模型
  14. Linux team多网卡绑定
  15. 《和沐阳一起学POST+JS逆向》视频教程
  16. 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
  17. NRF51822蓝牙服务(9)——动态修改设备的名称
  18. autojs网络验证,权朗网络验证源码
  19. iOS App内测分发的步骤解析
  20. 详解小程序的蓝牙模块

热门文章

  1. wx小程序订阅消息概念和应用场景理解(一次性消息一定要人手动触发)
  2. 利用Java反射机制调用类的私有方法
  3. 《知识产权法》参考教材和网站等
  4. 纺织服装行业数字化供应商协同平台:优化企业供应网络,轻松选择优质供应商
  5. 微方摄像头监控系统 v8.00 天空站特别版 下载
  6. 正数/负数的原码、反码、补码
  7. kali从入门到入狱之使用Hping3进行DDos攻击
  8. 如何将360流量监控数据清零
  9. 网文快捕 Metaproducts
  10. C语言gets_s, _getws_s函数了解