【人生三不争】不与领导争锋,不与同事争宠,不与下级争功。
【注】
此文章主要说的是Session的用法,并不能成功发送验证码,若要发送验证码可看此篇https://blog.csdn.net/weixin_43599906/article/details/103889666
(HttpClient可以发送验证码,不过需要配置通道扩展号码功能号,url需要短信平台地址)。读者可以在成功发送验证码后,将验证码存放到Session中并设置验证码在前端页面显示的一分钟时间和验证码的10分钟失效时间。
验证码存到Session的页面显示时间和系统失效时间
下面模拟一个发送验证码接口,将验证码存放到Session,并设置一分钟内不能持续发送验证码,并将验证码返回(可写入Service服务层),
//发送验证码
public Map<String, Object> sendSms(HttpServletRequest request,String phoneNum) throws ParseException {
Map<String, Object> map = new HashMap<String, Object>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//随机生成六位数字验证码
String verifyCode = String.valueOf((int) (Math.random() * 900000 + 100000));
HttpSession session = request.getSession();
//第一次发送验证码
session.setAttribute("currentDate", System.currentTimeMillis());//Session放入当前系统时间
long currentDate = (Long) session.getAttribute("currentDate");
Long date = (Long) session.getAttribute("date");
//一分钟内若发送验证码,currentDate的值则变成当前系统时间替换第一次发送验证码存入的时间,并获取第一次的date相减,两次验证码发送时间相隔不超过一分钟,不允许持续发送
if (date != null && currentDate - date < 1000 * 60 * 1) {
map.put("errorState", "验证码发送未超过一分钟");
return map;
}
session.setAttribute("date", System.currentTimeMillis());//Session放入当前系统时间
session.setAttribute("phoneNum", phoneNum);//Session放入手机号码
session.setAttribute("verifyCode", verifyCode);//Session放入验证码
//Session取出手机号,验证码,第一次存入的时间
String sphoneNum = (String) session.getAttribute("phoneNum");
String sverifyCode = (String) session.getAttribute("verifyCode");
Long sdate = (Long) session.getAttribute("date");
Date snowDate = sdf.parse(sdf.format(sdate));
//将验证码返回
map.put("verifyCode", verifyCode);
map.put("sendSmsSuccess", "发送成功!");
return map;
}
下面模拟一个校验验证码接口,取出手机号和验证码,设置10分钟的失效时间,返回校验失败的各种情况(可写入Service服务层,校验接口直接这么写没问题),
//校验验证码
public String checkSms(HttpServletRequest request,String phoneNum,String verifyCode){
HttpSession session = request.getSession();
//取出Session中手机号,验证码,存入的时间
String sphoneNum = (String) session.getAttribute("phoneNum");
String sverifyCode = (String) session.getAttribute("verifyCode");
Long sdate = (Long) session.getAttribute("date");
//若Session中手机号,验证码,存入的时间均为空
if (StringUtils.isEmpty(sphoneNum) && StringUtils.isEmpty(sverifyCode)
&& session.getAttribute("date") == null) {
return "验证码未发送或已过期!";
}
//设置Session中验证码的失效时间(这里为10分钟)
if ((System.currentTimeMillis() - sdate) > 1000 * 60 * 10) {
//超过10分钟清空Session,需重新发送验证码
session.removeAttribute("phoneNum");
session.removeAttribute("verifyCode");
session.removeAttribute("date");
return "验证码已失效!请重新发送验证码!";
}
if (!sverifyCode.equals(verifyCode)) {
return "验证码输入错误!";
}
if (!sphoneNum.equals(phoneNum)) {
return "手机号码不对应!";
}
//验证成功后清空Session
if (sphoneNum.equals(phoneNum) && sverifyCode.equals(verifyCode)) {
session.removeAttribute("phoneNum");
session.removeAttribute("verifyCode");
session.removeAttribute("now");
}
return null;
}
甲:寒冷的环境可以使人变得更年轻,
乙:小明的爷爷今年70岁,出门冻得跟孙子似的。
自此,文章到此结束,如果对大家有帮助又觉得还行的话,点个赞呗!