业务场景:用户发送短信验证码,接收并确认
//设置redis缓存的键、值、有效时间、线程等待时间
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
设置实体,在数据库中查询关于短信所需要的一些参数
package com.XXXXX.currentserver.model.po;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the s_setting database table.
*
*/
@Entity
@Table(name="s_setting")
@NamedQuery(name="SSetting.findAll", query="SELECT s FROM SSetting s")
public class SSetting implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
//短信apikey
private String smsapikey;
//短信密码
private String smspassword;
//API地址
private String smssendurl;
//短信用户名
private String smsusername;
}
接下来要写验证码提交
@Override
public ResultInfo complaintsSendSms(JSONObject json){
//需要发短信验证码的手机号
String phone = json.getString("phone");
//设置一个随机生成的数字验证码
long code = (long) (Math.random() * 1000000);
// 设置手机验证码存到redis的密钥
String value = "qwertuyQS1236_+WEDSAD";
long time = 60L;
// 设置手机验证码
set(value, code, time);
try {
ResultInfo res = feignCommonService.getSetting();
//查询数据库中设置的短信api等信息
SSettingDao date = SSettingDao.findOne(1);
StringBuffer sendsms = new StringBuffer(date.getSmssendurl());
//api
sendsms.append("apikey=" + data.getString("smsapikey"));
//用户名
sendsms.append("&username=" + data.getString("smsusername"));
//密码
sendsms.append("&password=" + data.getString("smspassword"));
//短信接收手机号
sendsms.append("&mobile=" + phone);
//手机短信接收的内容
sendsms.append("&content=" + URLEncoder.encode(String.valueOf(
"【 一介书生提示您 】验证码为:" + code + ",1分钟有效,请勿向任何人透露,以免造成账户或资金损失"),"UTF-8"));
//发送时间
sendsms.append("&startTime=" + System.currentTimeMillis());
// 创建url对象
URL url = new URL(sendsms.toString());
// 打开url连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置url请求方式 ‘get’ 或者 ‘post’
connection.setRequestMethod("POST");
// 发送
BufferedReader send = new BufferedReader(new InputStreamReader(url.openStream()));
// 返回发送结果
String result = send.readLine();
System.out.println("result:" + result);
return new ResultInfo(ServerMsgEnum.SUCCESS.getServerCode(), ServerMsgEnum.SUCCESS.getServerMsg());
}catch (IOException e){
e.printStackTrace();
}
}
短信接收验证码后,进行提交,就要进行验证
@Override
public ResultInfo suggest(JSONObject json) {
//拿到短信验证码
String code = json.getString("code");
//redis的密钥
String value = "qwertuyQS1236_+WEDSAD";
//查询redis中缓存的数据
checkCode = getKey(value).toLowerCase();
//redis中验证码如果和填写的验证码不一样,就返回验证码无效
if (!checkCode.equalsIgnoreCase(code)){
return new ResultInfo(ServerMsgEnum.FAIL.getServerCode(), "您输入的验证码有误,请重新输入");
}
......
}
redis获取值
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}