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

阿里云短信平台实现手机验证码登录_在线云短信验证码阿里云短信平台实现手机验证码登录首先创建一个工具类工具类AliyunMessageUtil代码如下所示:publicclassAliyunMessageUtil{ privatestaticfinalStringproduct=”Dysmsapi”; //产品域名,开发者无需替换 privatestaticfinalStringdomain=”dysmsapi.aliyuncs.com”; //此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)TOD

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

首先创建一个工具类
工具类AliyunMessageUtil代码如下所示:

public class AliyunMessageUtil {
	private static final String product = "Dysmsapi";
	// 产品域名,开发者无需替换
	private static final String domain = "dysmsapi.aliyuncs.com";

	// 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) TODO
	private static final String accessKeyId = "*************";
	private static final String accessKeySecret = "*****************"; 

	public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.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(paramMap.get("phoneNumber"));
		// 必填:短信签名-可在短信控制台中找到
		request.setSignName("*******");
		// 必填:短信模板-可在短信控制台中找到
		request.setTemplateCode("************");
		// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
		request.setTemplateParam(paramMap.get("jsonContent"));

		// hint 此处可能会抛出异常,注意catch
		SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
		return sendSmsResponse;
	}
}

Jetbrains全家桶1年46,售后保障稳定

发送验证码功能实现

@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;
	            }
	        }
	        //把验证码保存到map
	        map.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或post
						url: 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或post
						url: "" + 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记录,有效时间60s
					settime(obj); //开始倒计时
				}
			}

			//开始倒计时60s
			var 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;
				}
			}



			//发送验证码时添加cookie
			function 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>

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215903.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据结构——HashMap

    数据结构——HashMap众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。对于HashMap,我们最常使用的是两个方法:Get和Put。1.Put方法的原理调用Put方法的时候发生了什么呢?…

  • win32API中文参考手册[通俗易懂]

    win32API中文参考手册[通俗易懂]中文在线手册:http://www.yfvb.com/help/win32sdk/下面也是中文手册chm版,排版不是很好蓝奏云下载:https://wws.lanzous.com/iw8E3fhlz5icsdn下载:https://download.csdn.net/download/weixin_43833642/12434848[会自动长积分]如果是初学,上面的api勉强够用,建议参考着原版英文一起学习!最后如果帮到你可以点个赞!感谢!…

    2022年10月11日
  • 常见MQTT服务器搭建与试用(亲测通过)[通俗易懂]

    常见MQTT服务器搭建与试用(亲测通过)[通俗易懂]常见MQTT服务器搭建与试用(亲测通过)简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽、不可靠的网络的进行远程传感器和控制设备通讯等,正在日益成为物联网通信协议的重要组成部分。MQTT现在主要用于即时通讯,物联网M2M,物联网采集等。本文就社区上常见的开源MQTT服务器在常见操作系统上…

  • ov7725 stm32_如何给实验培养皿拍照

    ov7725 stm32_如何给实验培养皿拍照平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+鹰眼OV7725摄像头(注意,为了减少摄像头连线的麻烦,建议初学者选取单片机时选用带有摄像头接口的板子)工程介绍:需要移植FatFs文件系统,同时需要了解BMP位图的存储数据结构,从而实现将摄像头输出的RGB565像素数据直接输出到sd卡上,保存为*.bmp文件。1.BMP位图的存储1.1 数据结构介绍//BMP头文…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号