短信发送:

短信服务介绍

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

常用短信服务:

  • 阿里云
  • 华为云
  • 腾讯云
  • 京东
  • 梦网
  • 乐信

阿里云短信服务-介绍

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

应用场景:

  • 验证码
  • 短信通知
  • 推广短信

阿里云短信服务-注册账号

阿里云官网: https://www.aliyun.com/

点击官网首页注册按钮。

阿里云短信服务-设置短信签名

注册成功后,点击登录按钮进行登录。登录后进入短信服务页面:

要钱的...了解下就好......

设置短信签名:

开通了短信服务之后,进入短信服务管理页面,选择国内消息菜单,我们可以在这里添加短信签名

什么是短信签名?

  • 短信签名是短信发送者的署名,表示发送方的身份
  • 我们要调用阿里云短信服务发送短信,签名是必不可少的部分

添加短信签名方式
个人申请签名是有一定的难度的,我们只需要了解一下使用短信签名的具体流程

设置短信模板:

每一个被设置好的模板有一个短信模板详情,模板详情包含了模板的6条信息

 可以自己添加模板,并且提交后审核

设置AccessKey

AccessKey 是访问阿里云 API 的密钥,具有账户的完全权限,我们要想在后面通过API调用阿里云短信服务的接口发送短信,那么就必须要设置AccessKey。

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

进入到AccessKey的管理界面之后,提示两个选项:

  1. 继续使用AccessKey
  2. 开始使用子用户AccessKey

我们选择第二项

区别:
如果选择的是继续使用选项,我们创建的是阿里云账号的AccessKey,是具有账户的完全权限,有了这个AccessKey之后,我们就可以通过API调用阿里云服务,不仅是短信服务,其他服务也可以调用。相对来说,并不安全,当前的AccessKey泄露,会影响到当前账户的其他云服务。
如果选择开始使用子用户AccessKey,可以创建一个子用户,这个子用户可以分配比较低的权限,比如仅分配短信发送的权限,不具备操作其他的服务的权限,即使这个AccessKey泄漏了,也不会影响其他的云服务, 相对安全。

后续操作省略......

修改成用QQ邮箱验证码登录:

导入依赖:

<!--mail短信依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

resources下的yml添加配置:

spring:mail:host: smtp.qq.com#发送验证码的邮箱username: **********@qq.com# 你的QQ邮箱授权码password: ***********

获取QQ邮箱授权码方法:

在账户页下拉找到POP3/SMTP服务开启获得授权码

 然后把授权码编写到resources下的yml里即可

代码开发:

1、Service层的UserService:

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.reggie.entity.User;public interface UserService extends IService<User> {//发送邮件void sendMsg(String to,String subject,String text);
}

2、UserServiceImpl实现类

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.mapper.UserMapper;
import com.itheima.reggie.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import com.itheima.reggie.entity.User;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {//把yml配置的邮箱号赋值到from@Value("${spring.mail.username}")private String from;//发送邮件需要的对象@Autowiredprivate JavaMailSender javaMailSender;//邮件发送人@Overridepublic void sendMsg(String to, String subject, String text) {//发送简单邮件,简单邮件不包括附件等别的SimpleMailMessage message = new SimpleMailMessage();message.setFrom(from);message.setTo(to);message.setSubject(subject);message.setText(text);//发送邮件javaMailSender.send(message);}
}

3、在拦截器LoginCheckFilter中放行验证码请求和登录请求

4、 UserController代码:

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;//获取验证码@PostMapping("/sendMsg")public R<String> sendMsg(HttpSession session, @RequestBody User user){//获取邮箱号//相当于发送短信定义的String toString email = user.getPhone();String subject = "瑞吉外卖";//StringUtils.isNotEmpty字符串非空判断if (StringUtils.isNotEmpty(email)) {//发送一个四位数的验证码,把验证码变成String类型String code = ValidateCodeUtils.generateValidateCode(4).toString();String text = "【瑞吉外卖】您好,您的登录验证码为:" + code + ",请尽快登录";log.info("验证码为:" + code);//发送短信userService.sendMsg(email,subject,text);//将验证码保存到session当中session.setAttribute(email,code);return R.success("验证码发送成功");}return R.error("验证码发送异常,请重新发送");}//登录@PostMapping("/login")//Map存JSON数据public R<User> login(HttpSession session,@RequestBody Map map){//获取邮箱,用户输入的String phone = map.get("phone").toString();//获取验证码,用户输入的String code = map.get("code").toString();//获取session中保存的验证码Object sessionCode = session.getAttribute(phone);//如果session的验证码和用户输入的验证码进行比对,&&同时if (sessionCode != null && sessionCode.equals(code)) {//要是User数据库没有这个邮箱则自动注册,先看看输入的邮箱是否存在数据库LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(User::getPhone,phone);//获得唯一的用户,因为手机号是唯一的User user = userService.getOne(queryWrapper);//要是User数据库没有这个邮箱则自动注册if (user == null) {user = new User();user.setPhone(phone);user.setStatus(1);//取邮箱的前五位为用户名user.setName(phone.substring(0,6));userService.save(user);}//不保存这个用户名就登不上去,因为过滤器需要得到这个user才能放行,程序才知道你登录了session.setAttribute("user", user.getId());return R.success(user);}return R.error("登录失败");}
}

5、还需要修改前端一些界面

下载此front替换在你的项目即可:

链接:https://pan.baidu.com/s/12hbqPHFmcykc6qGJATHAaA?pwd=guiy 
提取码:guiy

测试时:如果输入验证码后登陆进去了然后马上闪退回登陆界面,请求都没问题的话,尝试着清理浏览器缓存试试~

【瑞吉外卖】学习笔记-day5:(三)手机验证码登录(用邮件发送代替)相关推荐

  1. 瑞吉外卖项目笔记+踩坑1——基础功能

     导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 1 ...

  2. 【瑞吉外卖开发笔记】

    瑞吉外卖开发笔记 源码地址 一.业务开发Day01 1.软件开发整体介绍 软件开发流程 角色分工 软件环境 2.瑞奇外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 3.环境搭建 开发环 ...

  3. 【瑞吉外卖项目】DAY5——第六章 手机验证码登录

    本章内容介绍手机验证码登录 点击获取验证码 收到短信,并输入验证码 点击登录,登录成功 短信发送_短信服务介绍和阿里云短信服务介绍 短信服务介绍 目前市面上有很多第三方提供的短信服务,这些第三方短信服 ...

  4. 瑞吉外卖day01笔记

    一. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工.职责, 并了解软件开发中涉及到的三种软件环境.那么这一小节,我 ...

  5. 学习【瑞吉外卖⑥】SpringBoot单体项目_手机验证码登录业务开发

    视频:[黑马程序员]Java 项目实战<瑞吉外卖>,轻松掌握 SpringBoot + MybatisPlus 开发核心技术 资料:2022 最新版 Java学习 路线图>第 5 阶 ...

  6. 【瑞吉外卖】day08:短信发送、手机验证码登录

    目录 4. 短信发送​编辑 4.1 短信服务介绍 4.2 阿里云短信服务介绍 4.3 阿里云短信服务准备 4.4 代码开发 5. 手机验证码登录 5.1 需求分析 5.2 数据模型 5.3 前端页面分 ...

  7. java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

    新增套餐 准备工作: 套餐信息分页查询 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto @GetMapping(&qu ...

  8. 瑞吉外卖【后台管理系统篇】

    瑞吉外卖 一.软件开发整体介绍 1.软件开发流程 2.角色分工 3.软件环境 二.瑞吉外卖项目介绍 1.项目介绍 2.技术选型 3.功能架构 三.开发环境搭建 1.数据库环境搭建 2.maven项目搭 ...

  9. 瑞吉外卖-Day01

    瑞吉外卖-Day01 课程内容 软件开发整体介绍 瑞吉外卖项目介绍 开发环境搭建 后台登录功能开发 后台退出功能开发 1. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发 ...

  10. 黑马瑞吉外卖之移动端验证码登录使用qq邮箱

    黑马瑞吉外卖之移动端验证码登录 说明 用qq邮箱进行验证码发送 hi,我是兰舟千帆,本次更文还是将瑞吉外卖的笔记完善一下.每一篇都写得很认真哦,希望需要的人可以得到帮助,谢谢你们的阅读. 说明 pc端 ...

最新文章

  1. 受控组件和不受控组件的区别
  2. 自己写一个图片按钮(XAML)
  3. 【Linux】18_日志管理rsyslog系统日志管理
  4. Spring(5)——Spring 和数据库编程
  5. 万能makefile深入浅出 - 第二篇
  6. 数据分析入门_char01
  7. instagram技术_Instagram9位科技女孩进行技术采访的主要技巧
  8. 连接超时_记一次网络请求连接超时的事故
  9. C++ Gotchas: Avoiding Common Problems in Coding and Design
  10. springmvc注解详解
  11. 人工智能书籍推荐:【A027】[图灵原创].人工智能简史
  12. Silvaco仿真学习
  13. cf进入服务器未响应,win7系统玩cf未响应的解决方法
  14. 一周市场摘抄20210125
  15. mysql里一个中文多少个字节_mysql里中文占多少个字节?
  16. 基于51单片机及MAX6675的8通道测温系统 protues仿真
  17. Beta周王者荣耀交流协会第一次Scrum会议
  18. [算法]发散思维能力题目
  19. 牛客大回馈,华为云优惠购买与使用心得
  20. 基于Java毕业设计在线云音乐系统源码+系统+mysql+lw文档+部署软件

热门文章

  1. 2021年4月股市行情预测
  2. R语言学习笔记︱Echarts与R的可视化包——地区地图
  3. Python入门第8天-字符串
  4. 西门子1200与WINCC上位机的通讯
  5. 游戏配音怎能少了这些步骤
  6. 算法图解[Aditya Bhargava]--读书笔记
  7. Vue中实现图片放大镜效果代码 复制即可用
  8. 使用EMD【经验模态分解】对一维波形信号进行滤波去噪以及Python实现代码[emd eemd ceemdan]
  9. 2011东莞市优秀表彰企业名单
  10. python 画一张中国地图 geopandas 城市地图 DATAV.GeoAtlas