注:本文章基于黑马程序员相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!

文章目录

  • 开篇
  • 一、短信发送
    • (1)短信服务介绍
    • (2)阿里云短信服务
    • (3)短信发送-代码开发:
  • 二、手机验证码登录
    • (1)需求分析
    • (2)代码开发-梳理交互过程
    • (3)代码开发-修改LoginCheckFilter
    • (4)代码开发-发送验证码短信
    • (4)代码开发-移动端用户登录

开篇

一、短信发送

(1)短信服务介绍

目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动,联通,电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务

常用短信服务:阿里云,华为云,腾讯云,京东,梦网,乐信

阿里云短信服务介绍(Short Message Service):是广大企业客户快速触达手机用户所优选使用的通信能力,调用API或用群发助手,即可发送验证码,通知类和营销类短信;国内验证短信秒级触达,到达率最高可达99%。应用场景:验证码,短信推广,推广短信

(2)阿里云短信服务

  1. 设置短信签名 :
    短信签名是发送者的署名,表示发送者的身份

  2. 设置短信模板
    短信模板包含短信发送内容,场景,变量信息

  3. 创建AccessKey管理


    创建新的用户,允许编程访问

    验证成功后,会生成一个AccessKey ID和AccessKey Secret,将其记录下来;

  4. 给用户添加短信权限(若账号密码泄漏,也只能访问短信服务):

(3)短信发送-代码开发:

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

具体开发步骤:

  1. 导入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>1.1.0</version>
</dependency>
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.dysmsapi.model.v20170525.*;public class SendSms {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "<your-access-key-id>", "<your-access-key-secret>");/** use STS TokenDefaultProfile profile = DefaultProfile.getProfile("<your-region-id>",           // The region ID"<your-access-key-id>",       // The AccessKey ID of the RAM account"<your-access-key-secret>",   // The AccessKey Secret of the RAM account"<your-sts-token>");          // STS Token**/IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setPhoneNumbers("1368846****");//接收短信的手机号码request.setSignName("阿里云");//短信签名名称request.setTemplateCode("SMS_20933****");//短信模板CODErequest.setTemplateParam("张三");//短信模板变量对应的实际值try {SendSmsResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}}
}

二、手机验证码登录

(1)需求分析

为了方便用户登录,移动端通常都会提供通过手机验证码登录的功能
手机验证码登录的优点:

  • 方便快捷,无须注册,直接登录
  • 使用短信验证码作为登录凭证无须记忆密码
  • 安全

注意:通过手机验证码登录,手机号是区分不同用户的标识;

(2)代码开发-梳理交互过程

  1. 在登录页面输入手机号,点击【获取验证码】按钮,页面发送ajax请求,在服务端用短信服务API给指定手机号发送验证码短信
  2. 在登录页面输入验证码,点击【登录按钮】,发送ajax请求,在服务端处理登录请求

然后就是搭建用户登录的大体框架,和之前一样,创建User实体类,UserService,UserServiceImpl,UserMapper和UserController;
另外的要引入一个工具类ValidateCodeUtils ,可以随机生成验证码:

import java.util.Random;/*** 随机生成验证码工具类*/
public class ValidateCodeUtils {/*** 随机生成验证码* @param length 长度为4位或者6位* @return*/public static Integer generateValidateCode(int length){Integer code =null;if(length == 4){code = new Random().nextInt(9999);//生成随机数,最大为9999if(code < 1000){code = code + 1000;//保证随机数为4位数字}}else if(length == 6){code = new Random().nextInt(999999);//生成随机数,最大为999999if(code < 100000){code = code + 100000;//保证随机数为6位数字}}else{throw new RuntimeException("只能生成4位或6位数字验证码");}return code;}/*** 随机生成指定长度字符串验证码* @param length 长度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}
}

(3)代码开发-修改LoginCheckFilter

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

 String[] urls = new String[]{//不需要拦截的请求"/employee/login","/employee/logout","/backend/**","/fornt/**","/common/**","/user/sendMsg",//移动端发送短信"/user/login"//移动端登录

(4)代码开发-发送验证码短信

通过随机验证码生成工具将验证码生成并暂时保存在HttpSession域中;

    /** 发送手机短信验证码*/@PostMapping("/sendMsg")public R<String> sendMsg(@RequestBody User user, HttpSession httpSession){//获取手机号String phone=user.getPhone();if (!StringUtils.isEmpty(phone)){//生成随机的4位验证码String code = ValidateCodeUtils.generateValidateCode(4).toString();log.info("code={}",code);//调用阿里云提供的短信服务API完成发送短信
//            SMSUtils.sendMessage("锦昊","",phone,code);//需要将生成的验证码保存到sessionhttpSession.setAttribute(phone,code);return R.success("手机验证码短信发送成功");}return R.error("短信发送失败");}

(4)代码开发-移动端用户登录

用户登录的上传给服务端的phone和code数据用Map接受,然后提取出来与session域中的数据进行比对,如果相同,则判断其是否为新用户,并进行新增操作;
/** 移动端用户登录*/@PostMapping("/login")public R<User> login(@RequestBody Map map, HttpSession httpSession) {log.info(map.toString());//获取手机号String phone = map.get("phone").toString();//获取验证码String code = map.get("code").toString();//从session中获取保存的验证码Object codeInSession = httpSession.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);userService.save(user);}httpSession.setAttribute("user",user.getId());return R.success(user);}return R.error("登录失败");}


登录成功后一般都会把用户信息返回给前端


如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!

【从零开始分析项目实战】12-阿里云手机验证码登录功能的实现相关推荐

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

    短信服务 我们需要在阿里云官网进行注册登录 阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力.调用API或用群发助手,即可发送验证码.通知 ...

  2. 06.简书项目实战三:详情页面和登录功能实现

    简书项目实战三:详情页面和登录功能实现 1. 详情页面布局 这部分的布局比之前的简单多了,就一个标题加上主要内容而已. export default class Detail extends Comp ...

  3. 大数据项目实战之阿里云服务器

    阿里云服务器购买全流程 最近想把之前的数仓项目从0-1走一遍,思考了一番后准备买三台阿里云的服务器去实现下对应的流程.具体落地流程如下! 一.注册阿里云账号 阿里云网址为:https://cn.ali ...

  4. 【项目实战】阿里云轻量云服务器中安装JDK1.8

    一.背景 刚买了一个阿里云轻量云服务器,非常兴奋,第一件事肯定时,安装JDK1.8啦! 二.操作汇总 以下是在阿里云轻量云服务器中具体的操作 cd opt # (切换到opt目录中) mkdir ja ...

  5. Flask项目实战——12—(帖子评论和阅读数功能、帖子分类功能实现、项目完善、引入Celery异步发送邮件)

    1.帖子评论和阅读数功能 添加阅读数量字段:前台模型文件 apps/front/models.py # 帖子编辑提交模型 class PostModel(db.Model):__tablename__ ...

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

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

  7. 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断

    转自:https://blog.csdn.net/eson_15/article/details/51425010 上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登 ...

  8. Vue3 京东到家项目实战第一篇(首页及登录功能开发) 进阶式掌握vue3完整知识体系

    目录 项目首页开发 项目准备✌️ 样式开发

  9. java实现手机验证码登录功能,写给正在求职的Java开发

    前言 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.提供了完善的认证机制和方法级的授权功能.是一款非常优秀的权限管理框架.它的核心是一组过滤器链,不同的功能经由不同 ...

最新文章

  1. 【C++基础】重抛异常与异常的使用场景
  2. mysql定义条件和处理_mysql sql存储过程条件定义与处理
  3. windows控制linux桌面图标,完全控制你的Windows桌面 (转)
  4. 介绍一个不错的jquery插件-cluetip
  5. c语言二叉树的构造输出,C语言数据结构树状输出二叉树,谁能给详细的解释一下...
  6. 1、Redhat GNOME安装访问命令行
  7. RJ-45接口信号定义
  8. c51单片机时钟程序汇编语言,51单片机数字钟汇编程序精选.docx
  9. iocomp iPlot使用说明4 通道对象
  10. java反编译有什么用处_Java反编译工具有什么用,Java反编译工具使用解析
  11. Redis 客户端工具
  12. 系统架构改进--多系统用户整合
  13. 基于Java的奖学金评定系统的设计
  14. 龙兵智能名片多企业小程序V2.3.3-开源版
  15. linux 转型 安卓,国内知名Linux网站Linux公社和红联都转型为Android安卓网站
  16. ZT I Believe I Can Fly(我相信我能飞)
  17. 警猫眼App:闲置安卓旧手机DIY变成安防监控云端摄像头
  18. 只有程序员才能看懂的趣图,第二个我就忍不住了哈哈哈哈!
  19. css样式换行缩进技巧
  20. 参考 2.4.20 2.6.X

热门文章

  1. Cetus:Connection error when read delay from RO backend:
  2. NSiS打包详细步骤教程
  3. 企业Mashups:揭开SOA新一面
  4. 基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM、CNN)实现的中文情感分析,含数据集可直接运行
  5. 使用Python在Excel画画
  6. POE、UPS技术的简单理解
  7. OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。
  8. ckpt下载 deeplabv3_tensorflow语义分割api使用(deeplab训练cityscapes)
  9. 深入浅出FFMPEG(精华)
  10. 超简单 CameraX 人脸识别效果封装