手机号发验证码实现用户注册登录

一.技术及思路

 二.案例编写

  • 配置环境:使用docker新建redis,mysql,rabbitmq的容器

  • MySQL:
  • 启动docker服务
  • systemctl start docker
  • 查看docker服务状态
  • systemctl status docker
  • 查看目录
  • 进入mysql目录下,然后新创建一个容器,熟悉一下docker部署MySQL
  • cd root/mysql/
  • 方式1
  • docker run -id -p 3306:3306 \
    --name=c_mysql2 \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    mysql:5.7
    

  • 方式2
  •  docker run --name=c_mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  • 查看容器运行状态
  • docker ps -a
  • 启动c_mysql容器
  • docker start c_mysql
  • 到这一步的时候,出错了,新的MySQL容器和旧的MySQL容器都启动不了了,而且后来将新的容器删除之后,旧的容器依旧启动不了,也不知道啥情况(前面是用第一种方式创建,不行就请教了老师,改成了第二种方式)
  • 然后到用Navicat连接诶数据库
  • 然后现在开始创建项目,配置环境

  • 自动创建springboot项目,导入依赖
  •   <!--整合mybatis-plus--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--加密组件,apache--><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.3</version></dependency><!--redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--jwt--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!--AMQP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
  • 然后,根据我们的需要,我们现在需要在这个父项目当中,创建两个子模块(注意要创建maven项目,因为springboot项目本身就已经继承了一个父类,那么就会导致我们无法再继承刚刚我们创建的父项目)
  • 在这两个模块当中,一个用来实现发送短消息,登录注册这三个功能,另一个用来实现收验证码的功能
  • 新建模块1:Pubreg,手写启动类,加入核心配置文件,里面增加mq的配置
  • package com.pro;import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
    @MapperScan(value = "com.pro.mapper")
    public class PubRegApp {public static void main(String[] args) {SpringApplication.run(PubRegApp.class,args);}
    }
    
  • #mq
    spring.rabbitmq.host=192.168.8.171
    #通信端口
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=rabbit
    spring.rabbitmq.password=rabbit
    spring.rabbitmq.virtual-host=/
    
  • package com.pro.config;import org.springframework.amqp.core.Queue;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;//标识了下面这个注解,就代表是配置类:相当于以前的applicationContext.xml文件
    @Configuration
    public class PubConfig {@Beanpublic Queue queue(){return new Queue("yzmQueue");}
    }
    

  • 然后在这个模块里面开始写我们的发送验证码和登录业务
    • 思路:业务层,我们需要根据前端传过来的用户名随机生成验证码,将用户名和密码存进reids,并且发送到yzmQueue队列中
    • package com.pro.service;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
      import com.baomidou.mybatisplus.extension.api.R;
      import com.pro.domain.User;
      import com.pro.mapper.UserMapper;
      import org.springframework.amqp.rabbit.core.RabbitTemplate;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.data.redis.core.RedisTemplate;
      import org.springframework.stereotype.Service;import java.time.Duration;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.Random;@Service
      public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 发送验证码* @param username*/@Overridepublic void proYzm(String username) {Random random = new Random();int yzm = random.nextInt(9000)+1000;//生成一个1000到10000之间的四位数验证码//用用户名做键,验证码做值,存进Redis,并设置一分钟的存活时间String YZM = String.valueOf(yzm);redisTemplate.opsForValue().set(username,YZM, Duration.ofSeconds(120));//将yzmQueue作为队列名,验证码和手机号的作为消息发送到消息队列当中,前提是我们已经写了配置类,创建了这个队列Map<Object,Object> map = new HashMap();map.put("username",username);map.put("yzm",yzm);rabbitTemplate.convertAndSend("yzmQueue",map);}/*** 验证是否已经发送过验证码* @param username* @return*/public String checkYzm(String username){String redisData = (String) redisTemplate.opsForValue().get(username);return redisData;}@Overridepublic String checkLogin(String username,String yzm) {String redisYzm = (String) redisTemplate.opsForValue().get(username);QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("username",username);User user = userMapper.selectOne(queryWrapper);//如果用户不存在,注册并判断是否登录成功if(user == null){if(yzm.equals(redisYzm)){User user1 = new User();user1.setUsername(username);userMapper.insert(user1);return "尊贵的"+username+"用户,您已注册并登录成功!";}else {return "验证码错误或已过期!";}}else {//用户存在,直接判断是否可以登录if(redisYzm.equals(yzm)){return "尊贵的"+username+"用户,欢迎回来!";}else {return "验证码错误或已过期!";}}}
      }
      
      package com.pro.controller;import com.pro.service.UserService;
      import com.pro.util.R;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RestController;@RestController
      public class UserController {@Autowiredprivate UserService userService;/*** 发验证码* @param username* @return*/@PostMapping("/proYzm")public R proYzm (String username){String checkYzm = userService.checkYzm(username);if(checkYzm == null){userService.proYzm(username);return new R(200,"验证码发送成功!");}return new R(300,"请两分钟之后再发验证码!");}/*** 登录判断* @param username* @param yzm* @return*/@PostMapping("/checkLogin")public String checkLogin(String username,String yzm){String s = userService.checkLogin(username, yzm);return s;}
      }
      
    • 效果:
    • Redis里面可以看到信息只能存活我们设置的60秒
  • 测试好发送验证码,我们现在来写接收验证码

  • 首先建一个模块conReg,手写启动类,加入核心配置文件,里面增加mq的配置
  • 写一个监听类来监听队列当中的验证码消息,模拟接收验证码
  • package com.pro.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;import java.util.Map;@Component
    public class SpringRabbitListener {/*  @RabbitListener(queues = "java")public void listenerQueue(String msg){System.out.println("消费者接受到了消息:"+msg);}*/@RabbitListener(queues = "yzmQueue")public void listenerWorkQueue1(Map map)throws Exception{System.out.println("【验证密码】您的验证码为:"+map.get("yzm")+"。尊敬的"+map.get("username")+"客户,以上验证密码2分钟内有效,请勿泄露或转发他人。【湖北移动 移动认证】");}}
    
  • 然后如果是已注册用户,登录会显示欢迎回来

  • 验证码错误或者过期,就会提示验证码过期或错误,这里我没有设置具体是用户名错误还是验证码错误了。

  •  

  • 遇到的问题
    • 数据库ID没有设自动递增,插入user的时候,用null去调用get方法
  • 后续需要改进:加入token,未登录不能操作,前端页面实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt了解(一)

狂飙的ChatGPT&#xff0c;为什么是OpenAI最先做出来&#xff1f; ChatGPT 的训练集来自哪里&#xff1f;

chatgpt赋能python:Python运行卡住?这是由什么原因引起的?

Python运行卡住&#xff1f;这是由什么原因引起的&#xff1f; 如果你是一个有10年Python编程经验的工程师&#xff0c;那么你经常会遇到Python运行卡住的情况。在这篇文章中&#xff0c;我将告诉大家Python程序在运行过程中可能会遇到的问题&#xff0c;以及如何解决这些问题…

OpenAI掌门人Sam Altman:AI的下一个发展阶段

来源&#xff5c;Greylock OneFlow社区编译 翻译&#xff5c;胡燕君、贾川 预告了一整年的GPT-4迟迟没来&#xff0c;人们猜想OpenAI是不是要跳票了&#xff0c;更何况他们之前的得意之作DALL-E也被开源Stable Diffusion打了个措手不及&#xff0c;再不来点深水炸弹业界地位危矣…

中国最容易和最难被ChatGPT所代替的 TOP25 职业

作者&#xff1a;chenqin https://zhuanlan.zhihu.com/p/620334140 OpenAI 研究人员曾发文称「约 80% 美国人的工作将被 AI 影响」。 文章的结论是&#xff0c;至少80%的美国劳动力会受到影响&#xff0c;他们的工作的10%会被GPT所替代。其中甚至有19%的美国劳动力的50%工作会被…

美国最新调查显示 50% 企业已在用 ChatGPT,其中 48% 已让其代替员工,你怎么看?

美国企业开始使用ChatGPT&#xff0c;我认为这不是什么新闻。 如果美国的企业现在还不使用ChatGPT&#xff0c;那才是个大新闻。 据新闻源显示&#xff0c;已经使用chatGPT的企业中&#xff0c;48%已经让其代替员工工作。 ChatGPT的具体职责包括&#xff1a;客服、代码编写、招…

Python 打造微信群聊天机器人(带操作界面)

前言 这几天我的一个小伙伴问我能不能给 Ta 做一个配置灵活的微信群聊天机器人&#xff0c;之前了解过 itchat 库的使用&#xff0c;我就爽快的答应了&#xff0c;花了一个晚上&#xff0c;终于做出了雏形。 电脑上运行程序如下: 手机上的信息如下: 其实基于 itchat 的微信机…

企业微信群机器人应用

现在很多企业都在使用企业微信进行工作交流&#xff0c;自从企业微信推出群机器人之后&#xff0c;使用企业微信的小伙伴一般都会用机器人来推送定时消息或者提醒等&#xff0c;这样能够为企业工作群的管理提升效率&#xff0c;能很好的帮助企业运营管理工作群&#xff0c;同样…

微信群机器人(仿真企业微信群机器人)

使用过企业微信的朋友应该应该用过企业微信群机器人&#xff0c;它是企业微信的原生功能&#xff0c;你在企业微信群中新建一个机器人&#xff0c;随后就可以获得这个群机器人的web挂钩&#xff0c;调用这个web挂钩并加上消息参数就可以让这个机器人在群内发送消息&#xff0c;…

为何ChatGPT一出现让巨头们都坐不住?

近几个月来&#xff0c;ChatGPT都是当仁不让的舆论话题。 上一次AI在全球范围内引起轰动&#xff0c;还是谷歌的AI机器人AlphaGO下棋战胜围棋世界冠军的时候。 ChatGPT的出现&#xff0c;让国内外几乎所有的科技巨头都坐立不安。 2月1日&#xff0c;谷歌母公司Alphabet首席执…

科技云报道:为何ChatGPT一出现让巨头们都坐不住?

科技云报道原创。 近几个月来&#xff0c;ChatGPT都是当仁不让的舆论话题。 上一次AI在全球范围内引起轰动&#xff0c;还是谷歌的AI机器人AlphaGO下棋战胜围棋世界冠军的时候。 ChatGPT的出现&#xff0c;让国内外几乎所有的科技巨头都坐立不安。 2月1日&#xff0c;谷歌…

产品体验文档模板——ChatGPT案例

今天和大家免费分享产品体验文档模板——ChatGPT案例&#xff0c;包括基本信息、产品信息、市场分析、用户分析、用户分析、产品分析、产品总结多个模块内容 【文档下载】 【文档预览】

【CV】计算机视觉领域的 GAN 模型综述论文笔记

论文名称&#xff1a;Generative Adversarial Networks in Computer Vision: A Survey and Taxonomy 论文下载&#xff1a;https://dl.acm.org/doi/abs/10.1145/3439723 论文年份&#xff1a;ACM Computing Surveys 2021 论文被引&#xff1a;173&#xff08;2022/04/12&#x…

计算机视觉领域论文投稿

文章目录 工程技术大类&#xff08;中科院一区&#xff09;计算机科学大类&#xff08;中科院一区&#xff09;综合性期刊大类&#xff08;中科院一区&#xff09; 中科院分区期刊查询方式&#xff1a;《2020年中国科学院文献情报中心期刊分区表升级版&#xff08;试行&#xf…

论文投稿指南——计算机视觉 (Computer Vision) 顶会归纳

深度学习Tricks&#xff0c;第一时间送达 目录 &#xff08;一&#xff09;计算机视觉顶会 &#xff08;&#xff11;&#xff09;ICCV&#xff1a;International Conference on Computer Vision &#xff08;&#xff12;&#xff09;CVPR&#xff1a;International Confere…

学习新技术,争做新青年:请ChatGPT帮我写一篇计算机视觉分类算法论文

文章目录 学习新技术&#xff0c;争做新青年&#xff1a;你不会还不用 ChatGPT 吧&#xff1f;学习新技术请告诉我最好的图像分类模型是哪个请推荐最新的分类模型是哪个请详细介绍一下 Swin Transformer请给出Swin Transformer的论文链接请帮我分析一下Swin Transformer 的创新…

巴比特 | 元宇宙每日必读:从自研硬件领域撤退后,腾讯被传或将在国内独家代理Meta旗下VR产品Quest...

‌ 摘要&#xff1a;近日&#xff0c;据路透社报道&#xff0c;三位知情人士称&#xff0c;腾讯控股正在与脸书母公司Meta Platforms Inc&#xff08;Nasdaq&#xff1a;META&#xff09;就在中国销售Meta Quest系列虚拟现实头显进行谈判。路透社援引消息人士称&#xff0c;腾讯…

阿里减持商汤股票;金山办公将推出WPS AI;华为发布问界M5智驾版;东软集团2022年归母净利同比降129.23%丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 百家云推出人工智能生成内容&#xff08;AIGC&#xff09;解决方案 4月17日&#xff0c;音视频SaaS上市公司百家云宣布&#xff0c;公司将正式推出应用于多个垂直行业及场景的人工智能生成内容及视频解决方案。…

chatgpt赋能python:可以用手机写Python吗?

可以用手机写Python吗&#xff1f; 随着移动设备的普及&#xff0c;很多人已经开始抛弃传统的电脑或笔记本电脑而选择使用手机进行各种操作。因此&#xff0c;许多人开始疑惑&#xff1a;是否可以用手机编写Python代码&#xff1f;答案是肯定的。 Python编程平台 使用手机编…

程序员的工作周报该怎么写?

大多数公司都有写周报的要求&#xff0c;为什么要写周报&#xff1f;很多流于形式的周报&#xff0c;会让员工感到厌烦。特别是程序员&#xff0c;你让他写代码可以&#xff0c;写这种篇幅稍微大点的文字&#xff0c;简直要了他的命。 周报作为一种文字载体&#xff0c;是下级向…

如何写出高质量的年终总结?

见字如面&#xff0c;我是军哥&#xff01; 我掐指一算&#xff0c;各位到了要写年终总结的时候了&#xff0c;因为不大部分平时写文字的机会不多&#xff0c;一般都是提笔难&#xff0c;还有读者在读者群里问这个话题&#xff0c;所以我必须给安排一下。 首先说说&#xff0c;…