首页 > 数据库 >SpringBoot 整合 redis-阿里云发送短信

SpringBoot 整合 redis-阿里云发送短信

时间:2023-08-03 15:33:58浏览次数:43  
标签:code 短信 SpringBoot redis boot phone return public String

pom

<dependencies>
        <!--阿里云短信-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!--常见的工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.9</version>
        </dependency>

        <!--Redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!--Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

controller

@RestController
@CrossOrigin
public class RedisTes {

    @Autowired
    private SendSms sendSms;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String code(@PathVariable("phone") String phone){
        // 调用发送方法(Redis)
        String code = redisTemplate.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)){
            return phone + ": "+ code + " 已存在,还没有过期";
        }
        // 生成随机的验证码到Redis
        code = UUID.randomUUID().toString().substring(0,4);
        HashMap<String, Object> map = new HashMap<>();
        map.put("code", code);
        // 申请的验证码只能为数字,templateCode为阿里云的模板code序列号
        boolean isSend = sendSms.send(phone, "SMS", map);
        if (isSend){
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS);
            return phone + ": " + code + "发送成功! ";
        }else {
            return " 发送失败";
        }
    }
}

service

public interface SendSms {
    /**
     * 输入 发送的手机号码、模板短信code、发送的信息code
     * @param phoneNum
     * @param templateCode
     * @param code
     * @return
     */
    public boolean send(String phoneNum, String templateCode, Map<String,Object> code);
}

serviceImpl

@Service
public class SendSmsImpl implements SendSms{
    @Override
    public boolean send(String phoneNum, String templateCode, Map<String, Object> code) {
        // 连接阿里云
        DefaultProfile profile = DefaultProfile.getProfile("地区", "身份令牌key", "身份令牌pwd");
        IAcsClient client = new DefaultAcsClient(profile);
        // 构建请求
        // 构建请求
        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(phoneNum);//接收短信的手机号码
        request.setSignName("ElloeStudy");//短信签名名称
        request.setTemplateCode(templateCode);//短信模板CODE
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));
        try {
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
            return true;
        }catch (ClientException e) {
            e.printStackTrace();
        }catch (ClientException e){
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }
        return false;
    }
}

标签:code,短信,SpringBoot,redis,boot,phone,return,public,String
From: https://www.cnblogs.com/ElloeStudy/p/17603482.html

相关文章

  • docker部署项目,涉及springboot\tomacat\nginx\es
    sudoapt-getinstalldocker-ce=5:20.10.6~3-0~debian-bullseyedocker-ce-cli=5:20.10.6~3-0~debian-bullseyecontainerd.iodocker部署项目信息:--172.17.0.1   172.16.22.401、docker部署tomcatdockerrun-d --namestock-admin--restartalways-p81:8080-e"TZ......
  • Redis从入门到放弃(7):主从复制
    1、概念主从复制是Redis的一项重要特性,用于将一个Redis服务器(Master主节点)的数据复制到其他Redis服务器(Slave从节点),以实现数据的高可用性和读写分离。数据的复制是单向的,只能由主节点到从节点。2、作用主从复制在Redis中扮演着重要的角色,带来了以下几个主要的作用:高可用性:......
  • @SpringBootTest
     1.学会使用Test,让自己的代码不再有bug——@SpringBootTest的妙用 https://baijiahao.baidu.com/s?id=1760961522946985249&wfr=spider&for=pc2.SpringBootTest人类使用指南https://zhuanlan.zhihu.com/p/111418479  3.解析“@ExtendWith注解“https://blog.csdn......
  • redis stream做轻量级消息队列的可行性
    背景对于消息数量很少的场景,尝试使用redisstream来做消息队列.为什么要用redis的stream,redis的其他数据结构可以吗?参考文章1:https://www.zhihu.com/question/43688764?sort=created参考文章2:https://www.cnblogs.com/williamjie/p/11201654.htmlredis有一些机制有队......
  • redis 集群重启问题
    redis出现链接不稳定或者链接不上的时候,需要重新启动1.找到集群的位置上 下面的两个启动和停止命令进行停止和启动但停止时候启动的时候可能会出现下面的问题 这是要删除appendonly.aof和dump.rdb文件,也可以选先将这两个先备份一下,然后启动后重新恢复,才能启动成功end........
  • redis版本升级方法
    wget -P /tmp https://download.redis.io/releases/redis-6.2.6.tar.gz         #下载最新版本tar -C /opt/redis/ -xf /tmp/redis-6.2.6.tar.gz #解压cd redis-6.2.6 #进入新版本目录下yum -y install centos-release-scldevtoolset-9-gcc devtoo......
  • redis远程代码执行CVE-2016-8339
       Redis3.2.x<3.2.4版本存在缓冲区溢出漏洞,可导致任意代码执行。Redis数据结构存储的CONFIGSET命令中client-output-buffer-limit选项处理存在越界写漏洞。构造的CONFIGSET命令可导致越界写,代码执行。漏洞利用:修改配置文件redis.confcpredis.conf./src/......
  • SpringBoot-3 拦截器注入配置
    如果拦截器加载的时间点在Spring的上下文初始化之前,导致注入的值为null,您可以尝试以下两种解决方法:使用@PostConstruct注解:在拦截器中使用@PostConstruct注解标记一个初始化方法,在该方法中手动获取配置值,并进行相应的处理。这样可以确保在拦截器初始化完成后,配置值已经被正确加......
  • SpringBoot 快速配置日志方法
     快速配置日志方法#loglogging.file=logs/stdout.loglogging.file.max-size=20KBlogging.pattern.file=%date[%thread][IP:%X{ip}|USER:%X{user}][%-5level%logger{80}]%msg%nlogging.pattern.console=%date[%thread][IP:%X{ip}|USER:%X{user}][%-5level%logger{80}]......
  • SpringBoot 单元测试不执行:maven-surefire-plugin 版本问题
    SpringBoot单元测试不执行:maven-surefire-plugin版本问题 问题现象SpringBoot项目,在编写单元测试时,使用了JUnit4.13.2以上的版本。为了让Maven能自动运行单元测试,需要引入MavenSurefire或MavenFailsafe插件。项目中使用的maven-surefire-plugin版本号为......