整体思路
Spring接入腾讯云短信API发送短信,并同时把短信验证码存入redis中,登录时判断输入的验证码和redis中的验证码是否相同。
本文的redis操作只有读取和写入,详细整合springboot+redis查下如下:整合redis
一、添加SpringBoot集成腾讯云短信依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ws</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springBoot整合redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--腾讯云短信-->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.6</version>
</dependency>
</dependencies>
</project>
二、设置腾讯云短信的属性参数:
需要去腾讯云开通短信功能。
1、创建签名
2、创建正文模板
3、查看SDK AppID 和App Key
SDK AppID :**********
App Key:************************
TEMPLATE_ID(模版ID) :******
/**
* @Description: 腾讯云参数
* @Author: ws
* @date: 2019/10/16
*/
public class TencentSmsConstant {
// TODO:
public static final int APP_ID = 1400252751;
public static final String APP_KEY="ba64acc4247df96e5ad354024513e430";
public static final int TEMPLATE_ID = 441680;
public static final int EFFECTIVE_Time = 300;
}
三、编写发送短信工具类
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.httpclient.HTTPException;
import org.json.JSONException;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Random;
/**
* @Description: 发送短信的工具类
* @Author: ws
* @date: 2019/10/12
*/
@Component
public class SendSmsUtil {
@Resource
RedisUtil redisUtil;
/**
* @Description: 发送短信
* @Param: [photoNumber]
* @return java.lang.String
* @Author: ws
* @date: 2019/10/12
*/
public String sendSms(String phone){
// 生成随机数
String code=createRodom();
SmsSingleSenderResult result =null;
try {
// 模板需要的参数
String[] params = {code};
SmsSingleSender ssender = new SmsSingleSender(TencentSmsConstant.APP_ID,TencentSmsConstant.APP_KEY);
// 单发短信
result = ssender.sendWithParam("86", phone, TencentSmsConstant.TEMPLATE_ID, params, null, "", "");
} catch (JSONException e) {
// json解析错误
e.printStackTrace();
} catch (IOException e) {
// 网络IO错误
e.printStackTrace();
} catch (HTTPException e) {
e.printStackTrace();
}
// 保存验证码到redis
redisUtil.set(phone,code,TencentSmsConstant.EFFECTIVE_Time);
if(!"OK".equals(result.errMsg)){
return "验证码发送失败";
}
return result.errMsg;
}
/**
* @Description: 创建6位数随机数
* @return java.lang.String
* @Author: ws
* @date: 2019/10/12
*/
public String createRodom(){
Random random = new Random();
String result="";
for (int i=0;i<6;i++)
{
result+=random.nextInt(10);
}
return result;
}
}
四、Controller代码
/**
* @Description: 验证码登录
* @Param: [phone, code]
* @Author: ws
* @date: 2019/10/14
*/
@RequestMapping("/loginCode")
public JsonData logonCode(@RequestBody User user){
User selectUser = userSerivce.selectByPhone(user.getPhone());
if(selectUser ==null){
return JsonData.fail(null,"账号不存在");
}
if(!user.getCode().equals(redisUtil.get(user.getPhone()))){
return JsonData.fail(null,"验证码不正确");
}
return JsonData.success(selectUser,"登陆成功");
}