SpringBoot对接Twilio实现发送验证码和验证短信码

 更新时间:2025年03月06日 08:27:18   作者:HBLOG  
Twilio是一家提供云通信服务的公司,旨在帮助开发者和企业通过简单的API实现各种通信功能,下面我们来看看如何对接Twilio实现发送验证码和验证短信码吧

Twilio介绍

Twilio是一家提供云通信服务的公司,旨在帮助开发者和企业通过简单的API实现各种通信功能。以下是Twilio的一些主要特点和服务介绍:

核心功能

  • 短信服务(SMS):允许用户通过API发送和接收短信,支持全球范围内的短信发送。
  • 语音通话:提供语音通话的API,支持拨打和接听电话,语音识别等功能。
  • 视频通话:支持实时视频通话和视频会议,适用于各种应用场景。
  • 聊天服务:提供多种聊天功能,包括Web聊天、SMS聊天和社交媒体集成。
  • 电子邮件服务:通过SendGrid(Twilio收购的公司)提供电子邮件发送和管理服务。

代码工程

1. 添加依赖

在你的pom.xml中添加Twilio的依赖:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Twilio</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.twilio.sdk</groupId>
            <artifactId>twilio</artifactId>
            <version>8.25.0</version> 
        </dependency>
    </dependencies>
</project>

2. 配置Twilio

application.propertiesapplication.yml中添加Twilio的配置:

twilio.account-sid=你的Twilio账户SID
twilio.auth-token=你的Twilio认证Token
twilio.phone-number=你的Twilio电话号码

3. 创建Twilio配置类

创建一个配置类来初始化Twilio客户端:

package com.et.twilio.config;

import com.twilio.Twilio;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TwilioConfig {

    @Value("${twilio.account-sid}")
    private String accountSid;

    @Value("${twilio.auth-token}")
    private String authToken;

    @Bean
    public void init() {
        Twilio.init(accountSid, authToken);
    }
}

4. 创建服务类

创建一个服务类来处理发送验证码和验证短信码的逻辑:

package com.et.twilio.service;

import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Service
public class SmsService {

    @Value("${twilio.phone-number}")
    private String twilioPhoneNumber;

    private Map<String, String> verificationCodes = new HashMap<>();

    public void sendVerificationCode(String toPhoneNumber) {
        String code = generateVerificationCode();
        verificationCodes.put(toPhoneNumber, code);

        Message.creator(
                new PhoneNumber(toPhoneNumber),
                new PhoneNumber(twilioPhoneNumber),
                "Your verification code is: " + code)
                .create();
    }

    public boolean verifyCode(String phoneNumber, String code) {
        String storedCode = verificationCodes.get(phoneNumber);
        return storedCode != null && storedCode.equals(code);
    }

    private String generateVerificationCode() {
        Random random = new Random();
        return String.format("%06d", random.nextInt(1000000)); // 生成6位验证码
    }
}

5. 创建控制器

创建一个控制器来处理HTTP请求:

package com.et.twilio.controller;

import com.et.twilio.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/sms")
public class SmsController {

    @Autowired
    private SmsService smsService;

    @PostMapping("/send")
    public String sendVerificationCode(@RequestParam String phoneNumber) {
        smsService.sendVerificationCode(phoneNumber);
        return "Verification code sent!";
    }

    @PostMapping("/verify")
    public String verifyCode(@RequestParam String phoneNumber, @RequestParam String code) {
        boolean isValid = smsService.verifyCode(phoneNumber, code);
        return isValid ? "Verification successful!" : "Invalid verification code!";
    }
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

github.com/Harries/springboot-demo(Twilio)

6. 测试功能

启动你的

Spring Boot应用程序,并使用Postman或其他工具测试以下API:

  • 发送验证码:POST /api/sms/send?phoneNumber=目标手机号
  • 验证验证码:POST /api/sms/verify?phoneNumber=目标手机号&code=验证码

注意事项

  • 确保你的Twilio账户已验证并且可以发送短信。
  • 处理验证码的存储和过期逻辑,以防止滥用。
  • 考虑使用更安全的存储方式(如数据库)来存储验证码,而不是使用内存中的Map。

这样,你就可以在Spring Boot中实现与Twilio的集成,发送和验证短信验证码的功能

到此这篇关于SpringBoot对接Twilio实现发送验证码和验证短信码的文章就介绍到这了,更多相关SpringBoot Twilio发送验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈一下Java的线程并发

    浅谈一下Java的线程并发

    大家好,本篇文章主要讲的是浅谈一下Java的线程并发,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • SpringAOP核心对象的创建图解

    SpringAOP核心对象的创建图解

    这篇文章主要介绍了SpringAOP核心对象的创建详解,通过使用AOP,我们可以将横切关注点(如日志记录、性能监控、事务管理等)从业务逻辑中分离出来,使得代码更加模块化、可维护性更高,需要的朋友可以参考下
    2023-10-10
  • Java解决xss转义导致转码的问题

    Java解决xss转义导致转码的问题

    跨站脚本攻击XSS是最普遍的Web应用安全漏洞,本文主要介绍了Java解决xss转义导致转码的问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Java实现File转换MultipartFile格式的例子

    Java实现File转换MultipartFile格式的例子

    本文主要介绍了Java实现File转换MultipartFile格式的例子,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java利用Spire.Doc for Java实现在Word中插入分页符与分节符

    Java利用Spire.Doc for Java实现在Word中插入分页符与分节符

    在使用 Java 进行 Word 文档自动化生成的过程中,对文档布局的精细控制往往是开发者面临的实际需求,本文将介绍如何利用 Spire.Doc for Java 库,通过 Java 代码在 Word 文档中插入分页符和分节符,感兴趣的小伙伴可以参考下
    2026-05-05
  • 详解JavaWeb过滤器 Filter问题解决

    详解JavaWeb过滤器 Filter问题解决

    过滤器就是对事物进行过滤的,在Web中的过滤器,当然就是对请求进行过滤,我们使用过滤器,就可以对请求进行拦截,然后做相应的处理,实现许多特殊功能,今天主要给大家讲解JavaWeb过滤器 Filter问题解决,感兴趣的朋友一起看看吧
    2022-10-10
  • 关于@JsonProperty,@NotNull,@JsonIgnore的具体使用

    关于@JsonProperty,@NotNull,@JsonIgnore的具体使用

    这篇文章主要介绍了关于@JsonProperty,@NotNull,@JsonIgnore的具体使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • java中final关键字的各种用法和注意事项详解

    java中final关键字的各种用法和注意事项详解

    final关键字在Java中用于实现不可变的特性,分别应用于类、方法和变量时,有着不同的作用和注意事项,这篇文章主要介绍了java中final关键字的各种用法和注意事项的相关资料,需要的朋友可以参考下
    2026-01-01
  • Java Web中Ajax技术使用方法介绍

    Java Web中Ajax技术使用方法介绍

    ajax技术是使页面能局部刷新的一种技术,下面这篇文章主要给大家介绍了关于JavaWeb之Ajax的基本使用与实战案例的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Java中ArrayList和LinkedList的区别

    Java中ArrayList和LinkedList的区别

    ArrayList和LinkedList在这个方法上存在一定的性能差异,本文就介绍了Java中ArrayList和LinkedList的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论