Day 5-6 阿里云手机验证码及登录代码

短信服务
我们需要在阿里云官网进行注册登录
阿里云短信服务(Short)是广大企业客户快速触达手机用户所优选使用的通信能力 。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用 。
注册成功后,点击登录按钮进行登录 。登录后进入短信服务管理页面,选择国内消息菜单:
切换到【模板管理】标签页:
光标移动到用户头像上,在弹出的窗口中点击【 管理】:
代码开发

Day 5-6 阿里云手机验证码及登录代码

文章插图
使用阿里云短信服务发送短信,可以参照官方提供的文档即可 。
具体开发步骤:
1、导入maven坐标
2、调用API
com.aliyunaliyun-java-sdk-core4.5.16com.aliyunaliyun-java-sdk-dysmsapi2.1.0
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setSysRegionId("cn-hangzhou");request.setPhoneNumbers(phoneNumbers);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam("{\"code\":\""+param+"\"}");try {SendSmsResponse response = client.getAcsResponse(request);System.out.println("短信发送成功");}catch (ClientException e) {e.printStackTrace();}
手机验证码登录
通过手机验证码登录时,涉及的表为user表,即用户表 。结构如下:
在开发代码之前,需要梳理一下登录时前端页面和服务端的交互过程:
1、在登录页面(front/page/login.html)输入手机号,点击【获取验证码】按钮,页面发送ajax请求,在服务端调用短信服务API给指定手机号发送验证码短信
2、在登录页面输入验证码,点击【登录】按钮,发送ajax请求,在服务端处理登录请求
开发手机验证码登录功能,其实就是在服务端编写代码去处理前端页面发送的这2次请求即可 。
前面我们已经完成了过滤器的开发,此过滤器用于检查用户的登录状态 。我们在进行手机验证码登录时,发送的请求需要在此过滤器处理时直接放行 。
//定义一些哪些请求路径不需要处理String[] urls= new String[]{"/employee/login","/employee/logout","/backend/**","/front/**","/common/**","/user/sendMsg","/user/login"};
在过滤器中扩展逻辑,判断移动端用户登录状态:
//4-2、判断登录状态,如果已登录,则直接放行if(request.getSession().getAttribute("user") != null){log.info("用户已登录,用户id为{}",request.getSession().getAttribute("user"));Long userId = (Long) request.getSession().getAttribute("user");//将获取到的用户id放入BaseContext.setCurrentId(userId);//放行filterChain.doFilter(request,servletResponse);return;}
在中创建方法,处理登录页面的请求,为指定手机号发送短信验证码,同时需要将验证码保存到,方便后续登录时进行比对 。
/*** 发送手机短信验证码* @param user* @return*/@PostMapping("/sendMsg")public R sendMessage(@RequestBody User user, HttpSession session){//获取手机号String phone = user.getPhone();if(StringUtils.isNotEmpty(phone)){//生成随机四位验证码String code = ValidateCodeUtils.generateValidateCode(4).toString();log.info("code:{}",code);//调用阿里云短信服务API完成发送短信SMSUtils.sendMessage("瑞吉外卖","",phone,code);//需要将生成的验证码保存到Sessionsession.setAttribute(phone,code);return R.success("短信发送成功");}return R.error("短信发送失败");}