阿里云验证码的登录流程 详解

1,导入依赖 阿里云短信 依赖

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.2.2</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.5.0</version></dependency>

2.导入 验证码生成工具和 发送验证码工具

 package com.util.math;//验证码生成工具
public class MathUtil {//获取几位随机数public static String getRandomStr(int weishu) {String s = "";for (int x = 0; x < weishu; x++) {s += (int) (Math.random() * 10);}return s;}发送验证码工具 package com.config.aliduanxin;/*** Created on 17/6/7.* 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过* 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)* 工程依赖了2个jar包(存放在工程的libs目录下)* 1:aliyun-java-sdk-core.jar* 2:aliyun-java-sdk-dysmsapi.jar* <p>* 备注:Demo工程编码采用UTF-8* 国际短信发送请勿参照此DEMO*/
public class SmsUtil {//产品名称:云通信短信API产品,开发者无需替换 static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)      -----------需要修改成自己的名称static final String accessKeyId = "LTAI48o4lBG11";static final String accessKeySecret = "hd71FFFZfdRbG4c2VAmmYkzE111";public static boolean sendSmsCode(String phoneNum, String code, String mubanCode) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers(phoneNum);//必填:短信签名-可在短信控制台中找到request.setSignName("泥土里猪猪男孩");             ---------------修改成自己的签名模板//必填:短信模板-可在短信控制台中找到request.setTemplateCode(mubanCode);//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"code\":\"" + code + "\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if ("OK".equals(sendSmsResponse.getCode())) {return true;}return false;}public static SendSmsResponse sendSms(String phoneNum, String name, String code, String mubanCode) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers(phoneNum);//必填:短信签名-可在短信控制台中找到request.setSignName("美图秀秀");            --------------改成自己签名//必填:短信模板-可在短信控制台中找到request.setTemplateCode(mubanCode);//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"name\":\"" + name + "\", \"code\":\"" + code + "\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象QuerySendDetailsRequest request = new QuerySendDetailsRequest();//必填-号码request.setPhoneNumber("15000000000");//可选-流水号request.setBizId(bizId);//必填-发送日期 支持30天内记录查询,格式yyyyMMddSimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");request.setSendDate(ft.format(new Date()));//必填-页大小request.setPageSize(10L);//必填-当前页码从1开始计数request.setCurrentPage(1L);//hint 此处可能会抛出异常,注意catchQuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);return querySendDetailsResponse;}}
}

3.写一个验证码发送的控制器


@Controller
public class SendCodeController extends BaseController {@ResourceUserService userService;/*** 发送登录验证码,手机号必须存在** @return*/@RequestMapping("/sendLoginCode")@ResponseBodyResponseDTO sendLoginCode(String phone) {//// 先生成一个6为随机数String code = MathUtil.getRandomStr(6);// 此时应该把这个验证发给阿里云,让阿里云给这个手机发送验证码// 发送验证码之前应该去验证手机号是否正确。// 应该去判断是否有这个手机号。if (userService.checkPhoneExist(phone)) {// 这个用户如果存在才发,不存在就不发了try {SmsUtil.sendSmsCode(phone, code, "SMS_18542111");// 发送验证码getSession().setAttribute("loginCode", code);} catch (Exception e) {e.printStackTrace();//此处的RessponfeDTO 为自己返回前端数据的模板return ResponseDTO.fail("验证码发送失败");}return ResponseDTO.ok("验证码发送成功");}return ResponseDTO.fail("验证码发送失败");}}

4.在控制器里面写一个登录控制器 把 code设置进入Session

 @RequestMapping("/user/login")@ResponseBodyResponseDTO login1(Model model, UserVO user){UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(user.getPhone(),user.getPassword());Subject subject = SecurityUtils.getSubject();//得到前端的填写的sessiongetSession().setAttribute("code",user.getCode());try {subject.login(usernamePasswordToken);  //只要执行这个方法就会跑到shrio 中doGet里面去}catch (AuthenticationException e){e.printStackTrace();model.addAttribute("errorMsg",e.getMessage());return ResponseDTO.fail("登录失败");}return ResponseDTO.ok("成功");}

5.验证中自己发的 和前端得到是否一样 ,一样 就登录 成功

aliyun验证码登录流程相关推荐

  1. 短信验证码登录流程思路及详细步骤

    点击蓝色"java大数据修炼之道"关注我哟加个"星标",每晚21:00,一起学技术 来源: blog.csdn.net/classabcd/article/de ...

  2. 对于短信验证码登录流程详细步骤

    1.构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数: 2.使用接口向短信平台发送手机号和验证码数据,然后短信平台再把验证码发送到制定手机号 ...

  3. vue项目web前端登录页数字验证码 登录流程

    1.创建code.js文件夹下面是js代码 function GVerify(options) {console.log(); // 创建一个图形验证码对象,接收options对象为参数this.co ...

  4. 抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)

    文章目录 一.手机号+验证码 二.前端 2.1. 点击登陆流程 2.2. 点击登录源码 三.后端登录 3.1. 登录流程图 3.2. 流程简述 3.3. 手机号验证码登录流程 一.手机号+验证码 二. ...

  5. 抖音实战~手机号密码一键注册登录流程(限制手机终端登录)

    文章目录 一.手机号+密码 二.前端 2.1. 点击登陆流程 2.2. 点击登录源码 三.后端登录 3.1. 登录流程图 3.2. 流程简述 3.3. 手机号验证码登录流程 一.手机号+密码 二.前端 ...

  6. 微信小程序中短信验证码登录全流程及代码

    才开始学习小程序,用到短信验证码登录 免费注册账号: http://sms_developer.zhenzikj.com/zhenzisms_user/register.html 完整demo下载:  ...

  7. Laravel后端接口使用mews/captcha验证码注册+登录流程讲解

    大致的流程讲解: 注册流程: 获取图形验证码并正确填写->请求注册验证短信->填写注册的用户信息+短信验证码->用户注册成功 登录流程: 前端请求短信->已注册用户:返回登录的 ...

  8. 微信小程序短信验证码 php,微信小程序中短信验证码登录全流程及代码

    才开始学习小程序,用到短信验证码登录,使用榛子云短信(smsow.zhenzikj.com) 效果: 我是java开发者,后端使用了springMvc 短信验证码实现流程 1.构造手机验证码,生成一个 ...

  9. vue+springboot+阿里云短信服务(集成redis实现验证码登录业务)

    阿里云短信服务-介绍 阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力.调用API或用群发助手,即可发送验证码.通知类和营销类短信:国内验 ...

最新文章

  1. 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
  2. antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型
  3. python插入排序算法详解-面试常考
  4. 一直使用管理员权限打开PowerShell
  5. 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)...
  6. CSS3 背景起始位置 background-origin属性
  7. linux securefx 传输文件失败,解惑:如何使用SecureCRT上传和下载文件、SecureFX乱码问题...
  8. oracle sql 导入mysql数据库备份_使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复...
  9. nvivo服务器项目,【NVivo教程】在Nvivo中设置案例路线图
  10. 最新JCR期刊IF及分区情况(中科院SCI期刊分区表)
  11. java 视频截图_获取视频截图
  12. 为什么你的问题总是得不到博主回复?一文教你如何高效和博主进行沟通!
  13. 手把手教你搭建一个你自己的语音合成系统
  14. hdu1429推箱子
  15. Pytorch目标检测实现
  16. 微信小程序开发之——个人中心-个人资料修改(7)
  17. python如何使用gpu加速_如何用云端 GPU 为你的 Python 深度学习加速?
  18. 分享个龙门神途脚本辅助工具,相当于一个云端的安卓模拟器
  19. Android的图片缓存处理
  20. 【算法导论】动态规划之“钢管切割”问题

热门文章

  1. [Activiti]UEL(Unified Expression Language)即统一表达式语言
  2. Android仿微信朋友圈3评论输入框及点击外部和列表滑动时隐藏输入框和键盘解决方法
  3. 虹科茵赛飞3D_Analyzer:高级的3D CAD 查看器
  4. MX5连接Eclipse调试
  5. 拷贝文件到U盘提示文件过大,但是文件却比U盘总容量小很多,解决办法
  6. Oppo市场认领应用之OppoSignVerify.apk签名流程
  7. 项目前期准备 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(一)
  8. 如何新建html页面,html网页制作的基本步骤是什么
  9. 计算机七年级作文,第一次偷玩电脑七年级作文.docx
  10. Latex插入图片报错,解决方案亲测有效!