【Springboot】| 阿里云发送短信验证码,你会了吗?

这篇具有很好参考价值的文章主要介绍了【Springboot】| 阿里云发送短信验证码,你会了吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌟更多专栏请点击👇

专栏 名字
🔥Elasticsearch专栏 es
🔥spring专栏 spring开发
redis专栏 redis学习笔记
🔥项目专栏 项目集锦
修bug专栏 bug修理厂

🦁 题外话

狮子之前发了一篇《邮箱发送验证码,你会了吗?》,很快上了热度榜单,但是那篇文章只是简单介绍了如何接收验证码的流程以及安利了一个接收验证码的工具类,并没有详细介绍在项目中如何具体操作,不少人来咨询具体操作的流程,今天给大家介绍一下如何使用阿里云短信接收验证码功能。

🦁 需要准备的东西

我们先进入阿里云官网:https://next.api.aliyun.com/,点击如下:
【Springboot】| 阿里云发送短信验证码,你会了吗?
【Springboot】| 阿里云发送短信验证码,你会了吗?
点击快速学习和测试,进入使用界面:
【Springboot】| 阿里云发送短信验证码,你会了吗?

阿里云tips:
若您的应用未上线,或网站域名未备案,或学习并体验使用阿里云通信短信服务,可以在下方「发送测试」模块,使用自定义测试签名/模板新功能
要完成发送体验,首先需完成自定义测试签名/模板的申请并审核通过,其次绑定测试手机号码。

意思就是咱们这种自己写的小项目只能使用它自带的模板!!!
点击如下图所示顺序:

【Springboot】| 阿里云发送短信验证码,你会了吗?
到了下面这一步,就完成了所需要准备的东西。开始敲代码叭!
【Springboot】| 阿里云发送短信验证码,你会了吗?


🦁 进入主题

1. 添加依赖

回到项目,添加阿里云依赖,这个依赖就在SDK示例那里!

        <!-- 阿里短信平台 -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.23</version>
        </dependency>

2. 配置yaml文件

这里没有想配置邮箱验证码那么复杂,这里只需要自定义两个变量来存储accessKeyId和accessKeySecret就行!!!

message:
  accessKeyId: LTAI5tQJFQHEnxxxxxxEMSogoC
  accessKeySecret: LZa3EGVR0XjS3KvvqxxxxxW5TNtbl

3. 创建阿里云客户端

这里是阿里云sdk实例自带的代码,咱们将其cv过来封装一下:

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    @SneakyThrows
    public Client createClient(String accessKeyId, String accessKeySecret){
        Config config = new Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }

4. 编写发送短信方法

这里也是通过cvSDK实例代码封装:

  /**
     * 发送短信
     *
     * @param phoneNumber 手机号
     * @param code        验证码
     * @return 返回结果
     */
    @Override
    @SneakyThrows
    public BaseResult sendMessage(String phoneNumber, String code) {
        // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
            Client client = createClient(accessKeyId, accessKeySecret);
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setSignName("阿里云短信测试")
                    .setTemplateCode("SMS_154xxxx09")
                    .setPhoneNumbers("1392xxxx410")
                    .setTemplateParam("{\"code\":\""+code+"\"}");
            RuntimeOptions runtime = new RuntimeOptions();
            // 复制代码运行请自行打印 API 的返回值
        SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, runtime);
        SendSmsResponseBody body = response.getBody();
        String code1 = body.getCode();
        if ("OK".equals(code1)){
            return BaseResult.ok();
        }
        return new BaseResult(500,body.getMessage(),null);
    }

5. 完整代码展示

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.lion.result.BaseResult;
import lombok.SneakyThrows;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MessageServiceImpl implements MessageService {
    @Value("${message.accessKeyId}")
    private String accessKeyId;
    @Value("${message.accessKeySecret}")
    private String accessKeySecret;

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
    @SneakyThrows
    public Client createClient(String accessKeyId, String accessKeySecret){
        Config config = new Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }


    /**
     * 发送短信
     *
     * @param phoneNumber 手机号
     * @param code        验证码
     * @return 返回结果
     */
    @Override
    @SneakyThrows
    public BaseResult sendMessage(String phoneNumber, String code) {
        // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
            Client client = createClient(accessKeyId, accessKeySecret);
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setSignName("阿里云短信测试")
                    .setTemplateCode("SMS_15xxx909")
                    .setPhoneNumbers("1392xxxx410")
                    .setTemplateParam("{\"code\":\""+code+"\"}");
            RuntimeOptions runtime = new RuntimeOptions();
            // 复制代码运行请自行打印 API 的返回值
        SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, runtime);
        SendSmsResponseBody body = response.getBody();
        String code1 = body.getCode();
        if ("OK".equals(code1)){
            return BaseResult.ok();
        }
        return new BaseResult(500,body.getMessage(),null);
    }
}

6. 测试

我们先来测试一下短信发送,在测试类里面编写:

   @Autowired
    MessageService messageService;
    @Test
    void contextLoads(){
        BaseResult result = messageService.sendMessage("139xxxxxx410", "8888");
    }

测试结果
【Springboot】| 阿里云发送短信验证码,你会了吗?

运行一次1s374ms,不得不说,确实是免费的东西好用(懂的都懂!)


🦁 场景实操

场景:接收短信验证码登录系统

  • 接收短信验证码并将其保存到redis数据库里,设置过期时间为5分钟,等待验证!

1. 编写生成验证码工具类

public class RandomUtil {
    /**
     * 生成验证码
     * @param digit 位数
     * @return
     */
    public static String buildCheckCode(int digit){
        String str = "0123456789";
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < digit; i++) {
            char ch = str.charAt(random.nextInt(str.length()));
            sb.append(ch);
        }
        return sb.toString();
    }
}

2. 保存到redis操作

   // 保存登录验证码到redis
    @Override
    public void saveLoginCheckCode(String phone, String checkCode) {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        // redis键为手机号,值为验证码,过期时间5分钟
        valueOperations.set("loginCode:" + phone, checkCode, 300, TimeUnit.SECONDS);
    }

3. 编写发送验证码短信

这个就是第三点的第5小点,不重复赘述。

4. 发送登录短信

@RestController
@RequestMapping("/user")
public class ShoppingUserController {
    @Service
    private UserService userService;
    @Service
    private MessageService messageService;
        /**
     * 发送登录短信验证码
     * @param phone 手机号
     * @return 操作结果
     */
    @GetMapping("/sendLoginCheckCode")
    public BaseResult sendLoginCheckCode(String phone) {
        // 1.生成随机四位数
        String checkCode = RandomUtil.buildCheckCode(4);
        // 2.发送短信
        BaseResult result = messageService.sendMessage(phone, checkCode);
        // 3.发送成功,将验证码保存到redis中,发送失败,返回发送结果
        if (200 == result.getCode()) {
            userService.saveLoginCheckCode(phone, checkCode);
            return BaseResult.ok();
        } else {
            return result;
        }
    }
    /**
     * 手机号验证码登录
     * @param phone 手机号
     * @param checkCode 验证码
     * @return 登录结果
     */
    @PostMapping("/loginCheckCode")
    public BaseResult loginCheckCode(String phone, String checkCode){
        String sign = userService.loginCheckCode(phone, checkCode);
        return BaseResult.ok(sign);
    }
}

🦁 最后

到这,一个完整的阿里云发送验证码就结束啦,咱们下期再见!!!文章来源地址https://www.toymoban.com/news/detail-472780.html

到了这里,关于【Springboot】| 阿里云发送短信验证码,你会了吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【账号系统之(手机验证码登录)】使用阿里云短信服务,实现服务商给手机发送验证码功能。

    目录 一、前言 二、前期准备 三、购买短信服务 四、申请签名和模板 (1) 进入阿里云短信服务控制台 (2) 添加签名 (3) 添加模板 五、RAM申请及权限配置 (1) 进入RAM访问控制界面 (2) 创建用户 (3) 分配权限 (4) 创建角色 (5) 记录段的值 六、阿里云.NET SDK身份验证接入 (1) 了解

    2024年02月04日
    浏览(42)
  • springboot集成阿里云短信验证码

    1.添加pom.xml依赖 2.application.yml添加配置文件 3.创建随机验证码工具类 4.创建发送验证码工具类 注意事项 :在 application.yml 中配置了 accessKeyID等参数 ,想在一个工具类里面的静态方法使用,于是使用了静态变量。使用 @Value 注解获取值,如下: debug发现获取不到,为 null 。原因

    2024年02月01日
    浏览(34)
  • 最近项目上需要发送短信整理了一篇文章 SpringBoot整合阿里云发送短信

    阿里云短信服务网址:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 第一步:申请签名(一般申请时长在1-2小时之间)特别注意:场景说明不要乱填以免申请不通过  第二步:申请短信模板(一般申请时长在1-2小时之间)特别注意:场景说明不要乱填以免申请不

    2024年02月06日
    浏览(38)
  • springboot整合阿里大于并结合mq发送短信

    在 pom.xml 文件中添加以下依赖: 在 application.properties 文件中添加以下配置: 其中, accessKeyId 和 accessKeySecret 是阿里云控制台上的AccessKey, signName 是短信签名, templateCode 是短信模板ID。 在Spring Boot中,我们可以使用MQ来异步发送短信,提高系统的响应速度。这里以ActiveMQ为例

    2024年02月08日
    浏览(33)
  • 腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

    前置:需要腾讯云的账号,后期授权需要,不需要买云服务器,有需要的可以购买短信套餐(几块钱) 搜索框输入短信,可以买一个短信套餐包,便宜不贵,进入短信服务的控制台 发送短信有频率限制,企业用户可以修改设置 之后我们需要对短信内容进行设置      类型有网站

    2024年02月09日
    浏览(37)
  • 【SpringBoot+MP】阿里云短信测试服务操作流程、用户手机验证码登录实现

    前面是站在后台员工的角度,现在站在消费者的角度,当客户从移动端选择通过验证码登录APP,需要调用云服务器的短信功能(厂商短信服务API) ,后端要做的就是生成验证码并发送,并针对请求中客户收到的验证码与后端发送的进行比对,确保一致后成功登录。 首先针对

    2024年02月02日
    浏览(29)
  • 使用阿里云发送短信

    使用阿里云短信服务有两种方式 API 发送和 控制台发送,控制台发送到话有太多限制,这里我们使用API 通过 调用服务端代码进行发送。 整体结构如下: 导入依赖 外放接口 MD5加密 发送工具类 接口返回数据 此时,调用接口后,会将加密后的验证码返回给接口调用端,接口调

    2024年02月20日
    浏览(33)
  • 阿里云短信发送接口实现

    使用阿里云短信接口发送验证码 springboot 工程引入web 引入 lombok 关键代码引入 启动项目,访问接口,短信发送成功!

    2024年02月11日
    浏览(34)
  • python发送阿里云短信教程

    1、开通云短信 注册阿里云,开通短信服务。 2、快速学习 进入控制台后,点击左边的快速学习,申请签名,申请模板 签名与模板的生成需要审核,需等待,注意签名与模板作用范围要一致。 2.1、添加签名 添加签名,如果是验证码就选验证码,如果是自己定义模板,则选择

    2024年01月15日
    浏览(27)
  • 详解织梦dedecms短信验证码功能(阿里短信)

    现在大部分网站都需要用短信验证码,因为织梦官方没有短信验证码插件,所以写了几个短信验证码插件,一个使用的是阿里云的短信验证码接口,一个使用的是阿里大于的短信验证码接口,一个使用的是阿里通信短信验证码接口,另外一个使用的是云之讯的短信接口。下面

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包