使用Redis,QQ邮箱模拟验证码验证
通常我们注册或者登录都可以通过手机号,邮箱进行验证码的验证登录,本篇文章基于QQ邮箱和Redis模拟简单的验证码验证,具体业务可以根据需求进行升级。通过Random随机生成6位数字,设置过期时间为60s,通过QQ邮件进行发送验证码内容。使用SpringBoot作为脚手架搭建简单模拟环境,Redis运行在虚拟机上,QQ邮箱自行申请POP3/SMTP服务。
1:Redis配置
1.1:在Linux上开启Redis服务
[root@LKCentos01 ~]# redis-server /etc/redis.conf
[root@LKCentos01 ~]# redis-cli
127.0.0.1:6379> quit
1.2:查看Linux的IP地址
1.3:创建SpringBoot工程配置Redis
1.3.1:引入依赖
<!--SpringBoot整合redis--><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- spring2.X集成redis所需common-pool2--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.0</version></dependency>
1.3.2:application.yaml配置
新建application.yaml配置Redis
spring:redis:#Redis服务器地址 此处的host为通过ifconfig命令获取的linux的IP地址host: 192.168.111.128 #Redis服务器连接端口port: 6379#Redis数据库索引(默认为0)database: 0#Redis连接超时时间(毫秒)timeout: 1800000#配置Redis连接池lettuce:pool:#Redis连接池的最大连接数(负数表示无限制)max-active: 20#Redis最大阻塞等待时间(负数表示没有限制)max-wait: -1#Redis连接池中的最大空闲连接数max-idle: 5#Redis连接池中的最小空闲连接数min-idle: 0
1.3.3:Redis配置类
新建RedisConfig配置Redis
@EnableCaching //开启redis操作
@Configuration
public class RedisConfig extends CachingConfigurerSupport {//创建RedisTemplate类@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);//key序列化方式template.setKeySerializer(redisSerializer);//value序列化template.setValueSerializer(jackson2JsonRedisSerializer);//value hashmap序列化template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}//创建缓存管理@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);// 配置序列化(解决乱码的问题),过期时间600秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}}
2:申请QQ邮箱服务
3:配置QQ邮箱
3.1:引入依赖
<!--发送邮件服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>
3.2:配置mail
spring:mail:username: #申请服务的邮箱,也就是发送邮件的邮箱password: #刚才申请服务产生的授权码host: smtp.qq.com #默认default-encoding: UTF-8 #默认properties: #默认mail:smtp:auth: truestarttls:enable: truerequired: true
4:实现
4.1:自动装配
//自动装配RedisTemplate@Autowiredprivate RedisTemplate redisTemplate;//自动装配JavaMailSender@Autowiredprivate JavaMailSender mailSender;
4.2:生成验证码存入Redis
//随机生成6位数字public String getCode(){Random random=new Random();StringBuilder stringBuilder=new StringBuilder();for(int i=0;i<6;i++){stringBuilder.append(random.nextInt(10));}//将随机得到的验证码存入redis中设置过期时间为60sredisTemplate.opsForValue().set("RedisCode", stringBuilder.toString(), 60, TimeUnit.SECONDS);return stringBuilder.toString();}
4.3:发送邮件
//发送邮件@GetMapping("/email")public String sendEmail(){SimpleMailMessage massage=new SimpleMailMessage();massage.setFrom("发送邮箱");massage.setTo("收件邮箱");massage.setSubject("头信息");massage.setText(getCode());//发送内容为验证码mailSender.send(massage);return "index";}
4.4:测试
发送邮件成功:
Redis存储成功:
5:参考
使用Springboot发送邮件(QQ邮箱)整合笔记
使用Redis,QQ邮箱模拟验证码验证相关推荐
- java发送qq邮箱验证_JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)
JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...
- react-hooks + node 使用qq邮箱发送验证码,验证修改密码
在平常,我们写登录注册react项目时,我们可能会考虑使用QQ邮箱发送验证码登录注册,或者使用QQ邮箱验证来修改密码,下面,我们就来使用QQ邮箱来简单发送个邮件. 1.当我们想在react项目中使用Q ...
- SpringBoot通过qq邮箱发送验证码
SpringBoot通过qq邮箱发送验证码 1.开启qq授权码 2.编写配置文件 spring:#邮箱验证mail:##163 smtp.163.com(反垃圾系统发送不了了)##qq smtp.qq ...
- 最简单Java实现QQ邮箱发送验证码
Java使用QQ邮箱发送验证码 1. 开启服务,获取授权码 需登录自己的QQ邮箱,打开 POP3/SMTP 服务,并获取授权码. 具体操作: 登录邮箱 邮箱首页 "设置" 选择 & ...
- 第十七周--关于qq邮箱接受验证码功能的实现
qq邮箱接收验证码 第一步:pom.xml导入配置 <!--QQ邮箱验证码所需jar包--><dependency><groupId>javax.activatio ...
- Spring boot 使用QQ邮箱进行一个验证登入
Spring boot 使用QQ邮箱进行一个验证登入 QQ邮箱开启权限 在QQ邮箱设置->账户里面,往下拉找到这个开启,手机号验证成功后会有一串英文字符串是待会儿要用到的密码. prom.xml ...
- Spring Boot 整合163或者qq邮箱发送验证码
前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...
- 实现会员注册功能时如何通过qq邮箱获取验证码,从而验证登录? 详细步骤
文章目录 会员注册_邮箱验证码功能实现: 前端操作: 后端操作: SpringBoot集成邮件发送验证码: 1.导入发送邮件jar包 2.配置 3.Controller层处理 4.service层注入 ...
- 引入QQ邮箱发送验证码进行安全校验
其他方案=>引入短信服务发送手机验证码进行安全校验 操作相对复杂且收费,详细教程可供参考选择 最近想给自己的项目在注册时加点安全校验,本想着使用短信验证码,奈何囊中羞涩只能退而求次改用QQ邮箱验 ...
- QQ邮箱发送验证码功能的实现
1.打开QQ邮箱的xxx服务,记住授权码 2.引入依赖 <dependency> <groupId>org.springframework.boot&l ...
最新文章
- Google App Engine for Java下的URL编码转换问题
- 训练NeRF只需5秒?!英伟达这项新技术给谷歌研究员整不会了 | 开源
- 提高网站访问速度的34条军规(2)
- python 检测exe是否未响应_第002篇:Python的安装
- 2020-07-01 CVPR2020 表示学习论文讨论(2) 笔记
- Asp.Net MVC 3【URLs, Routing,and Areas】续
- SpringMVC4返回json
- BeginnersBook Kotlin 教程
- JAVA netty 定时任务_Netty HashedWheelTimer 定时任务调用
- Python 实现数据结构中的单链表,循环单链表,双链表
- AI赋能,使用客服机器人改善客户服务的几种方法
- Scrapy爬虫案例-淘宝比价定向爬虫学习笔记
- Cannot find current proxy: Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available
- 高性能网络开发框架vpp,让你的技术提高一个level
- vue项目使用svg图片
- Android系列之Fragment(一)----Fragment加载到Activity当中
- 【数学建模和matlab】反思与总结(1)
- MyEclipse热部署----使用工具 JRebel
- 企业级区块链阶段性突破,新基建有了新“底座”
- 51Nod - 1298(点到线段的距离)