java代码实现简单的短信验证码发送,给验证码设置五分钟有效期,一次发送后60秒内不能重复发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java代码实现简单的短信验证码发送,给验证码设置五分钟有效期,一次发送后60秒内不能重复发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5934字,纯文字阅读大概需要9分钟。
内容图文
![java代码实现简单的短信验证码发送,给验证码设置五分钟有效期,一次发送后60秒内不能重复发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致](/upload/InfoBanner/zyjiaocheng/621/9ccd622f4c7c494cb30dbeb1756a0009.jpg)
标题 java代码实现简单的短信验证码发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致
controller
package com.zl.controller;
import com.zl.service.IVerifyCodeService;
import com.zl.util.JSONResult;
import com.zl.bean.vo.SMSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class VerifyCodeController {
@Autowired
private IVerifyCodeService verifyCodeService;
@RequestMapping("sendVerifyCode")
@ResponseBody
public JSONResult sendVerifyCode(String phoneNumber){
JSONResult json=new JSONResult();
try{
verifyCodeService.sendVerifyCode(phoneNumber);
}catch (RuntimeException re){
json.setMsg(re.getMessage());
json.setSuccess(false);
}
return json;
}
}
Serviceimpl
package com.zl.service.impl;
import java.util.Map;
import java.util.Date;
import java.util.HashMap;
import com.zl.bean.util.UserContext;
import com.zl.bean.vo.VerifyCodeVO;
import com.zl.service.IVerifyCodeService;
import com.zl.util.BidConst;
import com.zl.util.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.stereotype.Service;
@Service
public class VerifyCodeServiceimpl implements IVerifyCodeService {
//对应你阿里云账户的 accessKeyId
private String accessKeyId = "";
//对应你阿里云账户的 accessKeySecret
private String accessKeySecret = "";
//对应签名名称
private String signName = "";
//对应模板代码
private String templateCode = "";
//随机生成6位数验证码(int)Math.round(Math.random()*(0-1000000)+1000000)
/**
* 短信发送
*
* @param phoneNumber 发送的手机号
* @return ture发送短信成功,false失败
*/
public void sendVerifyCode(String phoneNumber) {
VerifyCodeVO vc = UserContext.getCurrentVerifyCode();
if (vc == null || DateUtil.secondsBetween(new Date(), vc.getLastSendTime()) > 60) {
String verifyCode = Math.round(Math.random() * (0 - 1000000) + 1000000) + "";
//初始化ascClient
DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
//创建发送短信请求
CommonRequest request = new CommonRequest();
//request.setProtocol(ProtocolType.HTTPS);使用POST请求
request.setMethod(MethodType.POST);
//阿里云对应发送短信的服务器地址(固定)
request.setDomain("dysmsapi.aliyuncs.com");
//对应的版本号(固定)
request.setVersion("2017-05-25");
//短信服务方式(固定)
request.setAction("SendSms");
//要发送的电话号码
request.putQueryParameter("PhoneNumbers", phoneNumber);
//签名名称
request.putQueryParameter("SignName", signName);
//模板代码
request.putQueryParameter("TemplateCode", templateCode);
//验证码
request.putQueryParameter("TemplateParam", "{\"code\":" + verifyCode + "}");
System.out.println("yzm_" + verifyCode);
try {
//发送短信,并获取响应流
CommonResponse response = client.getCommonResponse(request);
//输出回调信息(Json字符串)
System.out.println(response.getData());
//将Json字符串转换为Map对象
Map<String, Object> map = getMapToJson(response.getData());
//判断短信是否发送成功
if (map.get("Code").equals("OK")) {
//创建短信验证码对象
VerifyCodeVO verifyCodeVO = new VerifyCodeVO();
verifyCodeVO.setLastSendTime(new Date());
verifyCodeVO.setPhoneNumber(phoneNumber);
verifyCodeVO.setVerifyCode(verifyCode);
//将短信验证码存入Session
/*HttpSession session = request.getSession();
UserContext.putVerifyCode(verifyCodeVO);*/
// session.setAttribute("verifyCodeVO",verifyCodeVO );
UserContext.putVerifyCode(verifyCodeVO);
} else {
throw new RuntimeException();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("短信发送失败");
}
} else {
throw new RuntimeException("发送频繁");
}
}
@Override
public boolean verify(String phoneNumber, String verifyCode) {
VerifyCodeVO vc=UserContext.getCurrentVerifyCode();
if(vc!=null
&& vc.getPhoneNumber().equals(phoneNumber)
&& vc.getVerifyCode().equalsIgnoreCase(verifyCode)
&& DateUtil.secondsBetween(new Date(), vc.getLastSendTime())<=BidConst.VERIFYCODE_VAILDATE_SECOND){
return true;
}
return false;
}
public String getTemplatecode() {
return templateCode;
}
/**
* 将Json字符转换为map对象
* @param json
* @return
*/
public static Map<String, Object> getMapToJson(String json) {
JSONObject jsonObject = JSONObject.parseObject(json);
Map<String, Object> valueMap = new HashMap<String, Object>();
valueMap.putAll(jsonObject);
return valueMap;
}
}
VerifyCodeVO 封装验证码,手机号,最后发送时间到session中
package com.zl.bean.vo;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
/**
* 存放验证码相关内容,这个对象是放在session中的
*
* @author Administrator
*
*/
@Getter
@Setter
public class VerifyCodeVO {
private String verifyCode;//验证码
private String phoneNumber;//发送验证码的手机号
private Date lastSendTime;//最近成功发送时间
}
把VerifyCodeVO放到session中
```java
package com.zl.bean.util;
import javax.servlet.http.HttpSession;
import com.zl.bean.Logininfo;
import com.zl.bean.vo.VerifyCodeVO;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* 用于存放当前用户的上下文
*
* @author Administrator
*
*/
public class UserContext {
public static final String VERIFYCODE_IN_SESSION = "verifycode_in_session";
/**
* 反向获取request的方法,请查看RequestContextListener.requestInitialized打包过程
*
* @return
*/
private static HttpSession getSession() {
return ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest().getSession();
}
public static void putVerifyCode(VerifyCodeVO vc) {
getSession().setAttribute(VERIFYCODE_IN_SESSION, vc);
}
/**
* 得到当前的短信验证码
*
* @return
*/
public static VerifyCodeVO getCurrentVerifyCode() {
return (VerifyCodeVO) getSession().getAttribute(VERIFYCODE_IN_SESSION);
}
}
内容总结
以上是互联网集市为您收集整理的java代码实现简单的短信验证码发送,给验证码设置五分钟有效期,一次发送后60秒内不能重复发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致全部内容,希望文章能够帮你解决java代码实现简单的短信验证码发送,给验证码设置五分钟有效期,一次发送后60秒内不能重复发送,并把验证码放到session中,判断输入的号码是否与刚才发送的一致所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。