我们都知道,redis在保存数据的时候,有一个时效性。我们可以利用这点完成对验证的保存。
直接上代码:
1)service的接口phoneNum:是手机号;templateCode模版编号;code验证码
public interface SendSms {
public boolean send(String phoneNum, String templateCode, Map<String,String> code);
2)service的实现类:
@Service
public class SendSmsImpl implements SendSms {
@Override
public boolean send(String phoneNum, String templateCode, Map<String, String> code) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>","上面设置了AccessKey,里边有密码,直接填写就好");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("PhoneNumbers", phoneNum);
request.putQueryParameter("SignName",templateCode);
request.putQueryParameter("TemplateCode",code);
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
return false;
3)逻辑层:
@RestController
@CrossOrigin
public class SmsApiController {
@Autowired
private SendSms sendSms;
@Autowired
private RedisTemplate<String,String> redisTemplate;
@GetMapping("/send/{phone}")
public String code(@PathVariable("phone")String phone){
String code = redisTemplate.opsForValue().get(phone);
if(!StringUtils.isEmpty(code)){
return phone+":"+code+"已经存在,还可以正常使用";
code = UUID.randomUUID().toString().substring(0, 4);
HashMap<String, String> param = new HashMap<>();
param.put("code",code);
boolean isSend = sendSms.send(phone, "模版编号", param);
if(isSend){
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.SECONDS);
return "发送成功";
return "发送失败";
4)配置文件:
redis的配置文件需要设置:
spring.redis.host=192.168.80.137
spring.redis.port=6379
解决com.aliyuncs.exceptions.ClientException: SDK.InvalidRegionId : Can not find endpoint to access.异常问题
最近使用阿里云提供的短信接口
使用此页面阿里云OpenApi.
代码进行运行时。出现异常com.aliyuncs.exceptions.ClientException: SDK.InvalidRe...
java.util.concurrent.ExecutionException: com.aliyun.sdk.gateway.pop.exception.PopClientException
Uncaught
AliyunCore
ExceptionServer
Exception:
MissingPhoneNumbers PhoneNumbers is mandatory for this action.
根据报错提示可以知道参数名写错了 固定参数
PhoneNumbers
不能少个s
一 异常如下:
com.aliyuncs.exceptions.ClientException: InvalidVersion : Specified parameter Version is not valid
RequestId : C76118B6-DB57-4BC1-B8F0-BE13E525A677
at com.aliyuncs.DefaultAcsClient.getCommonR...
1、确保你当前操作的电脑可以ping通endPoint
公有云是互联网都能访问,但是私有云是内网才可以访问的,所以,确保你的网络能通;
如果网络不通时,抛出的异常是 Unknown Host,也是比较容易排查
2、确保你的AK(AccessKeyId)是正确且启用的
因为AK是可以被禁用,被删除的
如果是失效或者禁用删除了,提示信息是 invalid key
3、确保你的AS(AccessKeySe
使用阿里云短信服务发送验证码
1.查看阿里云短信服务文档使用指引:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.8d482c42vJiVOI ,开通阿里云短信服务
2.获取到 AccessKey ID 和 AccessKey Secret
AccessKey ID 用于标识用户。
AccessKey Secret 是用来验证用户的密钥。Acce
在Spring Boot项目中使用阿里云Redis,你需要在pom.xml文件中引入相应的Redis依赖。你可以使用spring-boot-starter-data-redis依赖来简化Redis的使用。
同时,如果你在一个服务器上开启了多个redis-server进程来组成集群,你需要在配置文件中配置cluster-announce-ip为公网IP,这样在使用Spring Boot连接到Redis集群时才能正确连接到对应的IP地址。
在测试类中,你可以编写一个测试方法来验证Redis是否成功整合。你可以使用RedisTemplate来进行操作,例如设置和获取值。
```java
package com.example.redistest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import javax.annotation.Resource;
@SpringBootTest
class RedisTestApplicationTests {
// 从容器中取出redisTemplate
@Resource
RedisTemplate redisTemplate;
@Test
void contextLoads() {
@Test
void testRedis(){
ValueOperations value = redisTemplate.opsForValue();
value.set("name","job");
System.out.println(value.get("name"));
这样,你就可以在Spring Boot项目中使用阿里云Redis进行数据缓存和存储了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Springboot整合阿里云redis教程(超详细!!)](https://blog.csdn.net/weixin_47025166/article/details/125360523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [SpringBoot连接阿里云Redis集群遇到的问题](https://blog.csdn.net/qq_53149124/article/details/130578477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]