1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 阿里云短信平台实现手机验证码登录

阿里云短信平台实现手机验证码登录

时间:2021-06-07 20:59:53

相关推荐

阿里云短信平台实现手机验证码登录

阿里云短信平台实现手机验证码登录

首先创建一个工具类

工具类AliyunMessageUtil代码如下所示:

public class AliyunMessageUtil {private static final String product = "Dysmsapi";// 产品域名,开发者无需替换private static final String domain = "";// 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) TODOprivate static final String accessKeyId = "*************";private static final String accessKeySecret = "*****************"; public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException {// 可自助调整超时时间System.setProperty(".client.defaultConnectTimeout", "10000");System.setProperty(".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(paramMap.get("phoneNumber"));// 必填:短信签名-可在短信控制台中找到request.setSignName("*******");// 必填:短信模板-可在短信控制台中找到request.setTemplateCode("************");// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam(paramMap.get("jsonContent"));// hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}}

发送验证码功能实现

@PostMapping("/sendMobileCode")public Map<String, Object> sendMobileCode(String phoneNumber) throws ClientException {String randomNum = getSixNum();String jsonContent = "{\"code\":\"" + randomNum + "\"}";Map<String, String> paramMap = new HashMap<>();paramMap.put("phoneNumber", phoneNumber);paramMap.put("jsonContent", jsonContent);SendSmsResponse sendSmsResponse = AliyunMessageUtil.sendSms(paramMap);if(!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {if(sendSmsResponse.getCode() == null) {//这里可以抛出自定义异常Map<String, Object> map = new HashMap<>();map.put("code", "error");return map;}if(!sendSmsResponse.getCode().equals("OK")) {//这里可以抛出自定义异常//返回结果Map<String, Object> map = new HashMap<>();map.put("code", "error");return map;}}//把验证码保存到mapmap.put(phoneNumber, randomNum);//手机号验证码发送成功Map<String, Object> map = new HashMap<>();map.put("code", randomNum);return map;}//生成随机验证码public static String getSixNum() {String str = "0123456789";StringBuilder sb = new StringBuilder(4);for (int i = 0; i < 6; i++) {char ch = str.charAt(new Random().nextInt(str.length()));sb.append(ch);}return sb.toString();}}

当然业务中也要添加根据用户手机号查询的方法然后写sql进行查询

前台页面

<!-- 手机验证码 --><form id="phone" onsubmit="return false" class="layui-form" style="display: none"><input id="protectMTel" name="protectMTel" placeholder="手机号" type="text" lay-verify="required"class="layui-input input"><hr class="hr15"><div class="layui-inline layui-show-xs-block" style="width: 60%;"><input id="PhonePassword" name="PhonePassword" lay-verify="" placeholder="验证码" type="text"class="layui-input input"></div><div class="layui-inline layui-show-xs-block" style="width: 38%;"><input type="button" id="second" value="获取验证码" /></div><hr class="hr15"><input value="登录" class="phone" lay-submit lay-filter="login" style="width:100%;" type="submit"><hr class="hr20"><button class="layui-btn set" style="width: 48%;" data-type="reload" lay-filter="set"value="password"><i class="layui-icon">&#xe678;</i>密码登陆</button><button class="layui-btn set" style="width: 48%;" data-type="reload" lay-filter="set" value="email"><i class="layui-icon">&#xe67b;</i>其他方式</button></form>

前台js代码 这里用了token拦截

<script>layui.use(['form'], function() {$ = layui.jquery;var form = layui.form,layer = layui.layer;//监听提交form.on('submit(login)', function(data) {//通过Ajax调用登录接口$.ajax({type: 'post', //提交方式get或posturl: globalData.server + 'login', //提交路径 data: {"loginName": $("#loginName").val(),"password": $("#password").val(),"code": $("#PhonePassword").val(),"phoneNumber": $("#protectMTel").val()},dataType: 'json',success: function(res) {localStorage.token = res.token;var user = res.data;var myArray = new Array();if (user != null) {localStorage.user = user;globalData.setUserInfo(user.id, user.loginName, user.roles, user.rolesIds);window.location.href = 'main.html';} else {layer.alert('登录失败' + res.message, {icon: 1,time: 2000}); //提示信息}},error: function() {alert("系统异常!!!");}});return false;})});$(function() {$("#second").click(function() {sendCode($("#second"));});v = getCookieValue("secondsremained"); //获取cookie值if (v > 0) {settime($("#second")); //开始倒计时}})//发送验证码function sendCode(obj) {var phonenum = $("#protectMTel").val();var result = isPhoneNum();if (result) {//ajax调用后台$.ajax({type: 'post', //提交方式get或posturl: "" + globalData.server + 'sendMobileCode', //提交路径 globalData.server+'login'data: {phoneNumber: phonenum},dataType: 'json',success: function(res) {if (res.code == 'error') {alert("发送失败,请重试!");} else {alert("发送成功,请查看手机!");alert("验证码为:" + res.code);}},error: function() {alert("系统异常!!!");}});addCookie("secondsremained", 60, 60); //添加cookie记录,有效时间60ssettime(obj); //开始倒计时}}//开始倒计时60svar countdown;function settime(obj) {countdown = getCookieValue("secondsremained");if (countdown == 0) {obj.removeAttr("disabled");obj.val("免费获取验证码");return;} else {obj.attr("disabled", true);obj.val("重新发送(" + countdown + ")");countdown--;editCookie("secondsremained", countdown, countdown + 1);}setTimeout(function() {settime(obj)}, 1000) //每1000毫秒执行一次}//校验手机号是否合法function isPhoneNum() {var phonenum = $("#protectMTel").val();var myreg = /^1(3|4|5|6|7|8|9)\d{9}$/; // 正则表达式验证手机号码格式是否正确 /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/if (!myreg.test(phonenum)) {alert('请输入有效的手机号码!');return false;} else {return true;}}//发送验证码时添加cookiefunction addCookie(name, value, expiresHours) {var cookieString = name + "=" + escape(value);//判断是否设置过期时间,0代表关闭浏览器时失效if (expiresHours > 0) {var date = new Date();date.setTime(date.getTime() + expiresHours * 1000);cookieString = cookieString + ";expires=" + date.toUTCString();}document.cookie = cookieString;}//修改cookie的值function editCookie(name, value, expiresHours) {var cookieString = name + "=" + escape(value);if (expiresHours > 0) {var date = new Date();date.setTime(date.getTime() + expiresHours * 1000); //单位是毫秒cookieString = cookieString + ";expires=" + date.toGMTString();}document.cookie = cookieString;}//根据名字获取cookie的值function getCookieValue(name) {var strCookie = document.cookie;var arrCookie = strCookie.split("; ");for (var i = 0; i < arrCookie.length; i++) {var arr = arrCookie[i].split("=");if (arr[0] == name) {return unescape(arr[1]);break;} else {return "";break;}}}</script>

大概是思路就是这样。阿里短信服务需要自己去申请开通,开通后申请签名和短信模板通过后才能使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。