短信服务

我们需要在阿里云官网进行注册登录
阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力。调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%;国际/港澳台短信覆盖200多个国家和地区,安全稳定,广受出海企业选用。

  • 首先先注册账号
  • 阿里云短信服务-设置短信签名

注册成功后,点击登录按钮进行登录。登录后进入短信服务管理页面,选择国内消息菜单:

  • 阿里云短信服务-设置短信模板

切换到【模板管理】标签页:

  • 阿里云短信服务-设置AccessKey

光标移动到用户头像上,在弹出的窗口中点击【AccessKey 管理】:

代码开发

使用阿里云短信服务发送短信,可以参照官方提供的文档即可。

具体开发步骤:
1、导入maven坐标
2、调用API

  • 导入maven坐标
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.1.0</version>
</dependency>
  • 代码开发-调用API
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessKeySecret>");
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次请求即可。

  • 代码开发-修改LoginCheckFilter

前面我们已经完成了LoginCheckFilter过滤器的开发,此过滤器用于检查用户的登录状态。我们在进行手机验证码登录时,发送的请求需要在此过滤器处理时直接放行。

//定义一些哪些请求路径不需要处理String[] urls  = new String[]{"/employee/login","/employee/logout","/backend/**","/front/**","/common/**","/user/sendMsg","/user/login"};

在LoginCheckFilter过滤器中扩展逻辑,判断移动端用户登录状态:

  //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;}
  • 代码开发-发送短信验证码

在UserController中创建方法,处理登录页面的请求,为指定手机号发送短信验证码,同时需要将验证码保存到Session,方便后续登录时进行比对。

    /*** 发送手机短信验证码* @param user* @return*/@PostMapping("/sendMsg")public R<String> 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("短信发送失败");}
  • 代码开发-登录
@PostMapping("/login")public R<User> login(@RequestBody Map map,HttpSession session){//        Map封装 key为手机号 value为codelog.info(map.toString());
//        获取手机号String phone = map.get("phone").toString();
//        获取验证码String code = map.get("code").toString();
//        从session获取保存的验证码Object codeInSession = session.getAttribute(phone);
//        进行验证码的对比(页面提交验证码和Session中验证码比对)if(codeInSession!=null&&codeInSession.equals(code)){//        如果能够比对成功,说明登陆成功LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper();queryWrapper.eq(User::getPhone,phone);User user = userService.getOne(queryWrapper);if(user == null){//        判断当前手机号对应的用户是否为新用户,如果是新用户完成注册user = new User();user.setPhone(phone);user.setStatus(1);userService.save(user);}//将数据放入session中session.setAttribute("user",user.getId());return R.success(user);}return R.error("登录失败");

这里由于阿里云验证码需要通过审批,而且个人基本很难审批成功,要么项目改前端代码,或者用邮箱代替即可。

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

  1. 阿里云手机验证码获取接口【接口对接的时候要仔细把里面的参数换成自己的参数即可】

    以下是接口代码 <?php/*** 生成签名并发起请求* @param $accessKeyId string AccessKeyId (https://ak-console.aliyun.co ...

  2. 对于阿里云手机 OS 大家都怎么看?

    "无锡之行没白走,看到了阿里云手机OS的样机,不管是完成度,还是概念都只有牛逼两字可形容.以服务APP为主打,地方服务由地方站提供,全国服务由阿里提供,刷手机支付从支付宝,所有的资料走云端. ...

  3. 手机验证码+Redis登录验证+token+登录拦截

    手机验证码+Redis登录验证+token+登录拦截 文章目录 手机验证码+Redis登录验证+token+登录拦截 解决方案 思想 以阿里云为例 1.阿里云官网开通短信服务 2.创建签名 3.创建短 ...

  4. 阿里云实现putty私钥登录全过程

    阿里云实现putty私钥登录全过程 阿里云实现putty私钥登录全过程 1 putty生成公钥和私钥 1)putty生成公钥和私钥 记得在空白区域 滑动 2 公钥上传到阿里云 1)公钥上传  私钥存到 ...

  5. mac、Linux SSH 阿里云 vultr免密登录服务器

    mac.Linux SSH 阿里云 vultr免密登录服务器 当你拥有了自己云服务器的时候,一定为了每次登录服务器输入密码特别痛苦. 那么福利来了,简单配置一下,免密登录你的服务器,希望能帮到大家 注 ...

  6. python按照号段生成手机号接收验证码_django 发送手机验证码的示例代码

    一.流程分析: 1.用户在项目前端,输入手机号,然后点击[获取验证码],将手机号发到post到后台. 2.后台验证手机号是否合法,是否已被占用,如果通过验证,则生成验证码,并通过运行脚本,让短信运营商 ...

  7. 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php)

    项目场景: 阿里云code结合git管理代码,运用webHook同步部署服务器代码(php) 问题描述: git生成密钥时linux用户为root,php运行用户是www.结果导致在服务器端git p ...

  8. 阿里云国际版账户登录不上,有什么办法解决吗?

    如果您无法登录阿里云国际版账户,请更改浏览器的默认隐私设置,这会阻止第三方 Cookie 干扰登录服务,并阻止您登录阿里云网站.若要解决此问题,请参阅您选择的浏览器的以下方法: Internet Ex ...

  9. 阿里云本机一键登录集成

    阿里云一键登录集成 //本机号码一键登录 @weakify(self);//环境检查,异步返回[[TXCommonHandler sharedInstance] checkEnvAvailableWi ...

最新文章

  1. 百度ueditor编辑器动态获取项目根目录
  2. 深度 | 阿里云蒋江伟:什么是真正的云原生?
  3. springboot学习笔记(六)
  4. thinkphp两表联查并且分页
  5. display:inline-block解决文字有间隙问题
  6. LeetCode 687. 最长同值路径(二叉树,递归)
  7. 谈谈创业这点事 之 时间窗口
  8. 屏幕录制专家——录制视频没声音的解决办法
  9. CAD怎么统计图纸中的设备材料?
  10. AISG2.0(二)——什么是电调天线,及AISG在其中的应用
  11. python excel表格去重_都说Excel大法好,Python大法其实也不错,批量去重处理更是神啊...
  12. 图片服务器-存储图片技巧
  13. 炫酷的时间HTML页面,炫酷css3垂直时间轴特效
  14. 3 4j不是合法的python表达式_3+4j不是合法的Python表达式。
  15. 为什么被证明“拖后腿”的苹果Mini手机,仍然还会再次发布新款?
  16. ASCII码和汉字码
  17. 计算机网络-常用英文简写与名词解释
  18. Unity 自定义Image形状
  19. a-card标签中的文字不能垂直居中
  20. Mixly第三方库开发的两种方法——U8g2库二次开发

热门文章

  1. 国外主要通用网络管理软件
  2. 在 Android Studio 中创建一个简单的 QQ 登录界面
  3. 推荐13个优秀的网站检测工具
  4. Freemarker + flying-saucer-pdf 基于IText2.17实现HTML文档转换成PDF
  5. java9 opens与exports的区别 1
  6. HTML 事件参考手册
  7. 那些年我追过的android
  8. python 小学生教材全解_小学教材全解人教版
  9. input不可编辑,不显示禁止图标
  10. 【常见网吧计算机系统故障及其解决方法】