来写一个自己的项目验证码时间限制器吧,全程使用map集合和一些String的方法
原理:声明一个全局Map map=new HashMap(); 注意一定要全局的,我写的是一个QQ邮箱验证,注意注意重点来了,我以QQ邮箱为key,以验证码为value,以QQ邮箱的key+1为key,以当前时间为value,两个是同方法里添加。设置时间为5分钟。写一个方法判断时间,通过字符串的方法截取时间转换为数字加5来判断验证码是否有效。
package com.example.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.Appcoid;
import com.example.demo.service.IAppcoidService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* <p>
* 验证码控制器
* </p>
*
* @author dengqiang
* @since 2022-05-24
*/
@RestController
@RequestMapping("/appcoid")
public class AppcoidController {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
IAppcoidService appcoidService;
Map map=new HashMap();
/**
* 发送邮箱验证码
* @param ueremile
* @return
*/
@PostMapping("/setEmil")
public String oi(String ueremile){
try {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("2986561890@qq.com");
simpleMailMessage.setSubject("邮箱注册");
String s = ueremile + "@qq.com";
simpleMailMessage.setTo(s);
int a = (int)(Math.random()*(9999-1000+1))+1000;
map.put(s,a);
Date day=new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = formatter.format(day);
String s1=s+1;
map.put(s1,format);
simpleMailMessage.setText("欢迎使用****,请在5分钟内注册,你的注册码为:\n"+a);
javaMailSender.send(simpleMailMessage);
return "cg";
} catch (MailException e) {
e.printStackTrace();
return "sb";
}
}
/***
* 注册用户
* @param ueremile
* @param nikename
* @param pwd
* @param yzm
* @return
*/
@PostMapping("/setAppcoli")
public String setAppcoli(String ueremile,String nikename,String pwd,String yzm){
String s = ueremile + "@qq.com";
String s1=s+1;
Boolean shenzhi = shenzhi(s1);
if (shenzhi){
map.remove(s);
map.remove(s1);
return "cs";
}
Object yzm1 = map.get(s).toString();
if (!yzm1.toString().equals(yzm)){
return "cw";
}
map.remove(s);
map.remove(s1);
Appcoid ap=new Appcoid();
ap.setUserphone(s);
ap.setNickename(nikename);
ap.setPwd(pwd);
Date day=new Date();
ap.setVerdata(day);
boolean save = appcoidService.save(ap);
if (save){
return "cg";
}else {
return "sb";
}
}
/***
* 验证码时间
* @param s1
* @return
*/
private Boolean shenzhi(String s1){
String dataio = (String) map.get(s1);
Date day=new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = formatter.format(day);
String substring = format.substring(0, format.indexOf(" "));
String substring2 = dataio.substring(0, format.indexOf(" "));
if (substring.equals(substring2)){
int substring1 = Integer.parseInt(format.substring(format.indexOf(" ")+1,format.indexOf(" ")+3));
int substring3 = Integer.parseInt(dataio.substring(dataio.indexOf(" ")+1,dataio.indexOf(" ")+3));
if (substring1==substring3){
int mm= Integer.parseInt(format.substring(format.indexOf(":")+1,format.indexOf(":")+3));
int mm1= Integer.parseInt(dataio.substring(dataio.indexOf(":")+1,dataio.indexOf(":")+3));
if ((mm-5)>mm1){
return true;
}else {
return false;
}
}else if ((substring1-1)>substring3){
int mm3= Integer.parseInt(format.substring(format.indexOf(":")+1,format.indexOf(":")+3));
int mm4= Integer.parseInt(dataio.substring(dataio.indexOf(":")+1,dataio.indexOf(":")+3));
if ((mm3+60-5)>mm4){
return true;
}else {
return false;
}
}
}else {
return true;
}
return false;
}
}