Java实现短信验证码

简介: 上一篇简单的实现了短信的验证码功能,今天主要对上篇的代码进行优化,这样方便运用到具体的实例当中。

原代码

// This file is auto-generated, don't edit it. Thanks.

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.models.*;
import com.aliyun.teaopenapi.*;
import com.aliyun.teaopenapi.models.*;

public class Sample {
    public static void main(String[] args_) throws Exception {
        Config config = new Config()
                //这里修改为我们上面生成自己的AccessKey ID
                .setAccessKeyId("LTAI5tLdwwPpCrJbzMdTdQ7")
             
                //这里修改为我们上面生成自己的AccessKey Secret
                .setAccessKeySecret("jnP9no9KhtsE4kVbqbV40JKCksCqy3");
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        Client client = new Client(config);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName("阿里云短信测试")//短信签名
                .setTemplateCode("SMS_154950909")//短信模板
                .setPhoneNumbers("157xxxxxxxx")//这里填写接受短信的手机号码
                .setTemplateParam("{\"code\":\"1234\"}");//验证码
        // 复制代码运行请自行打印 API 的返回值
        client.sendSms(sendSmsRequest);
    }
}

优化

添加maven依赖

 <!-- mybatis-->
<dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.9</version>
 </dependency>
 <!--spring的ioc相关-->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.1.6.RELEASE</version>
 </dependency>
 <!--spring的jdbc相关-->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>5.1.6.RELEASE</version>
 </dependency>

 <!--阿里云短信依赖-->
 <dependency>
     <groupId>com.aliyun</groupId>
     <artifactId>dysmsapi20170525</artifactId>
     <version>2.0.9</version>
 </dependency>
 <!--单元测试-->
 <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
     <scope>test</scope>
 </dependency>
 <!--spring整合单元测试-->
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-test</artifactId>
     <version>5.1.6.RELEASE</version>
 </dependency>
 <dependency>
     <groupId>com.aliyun.oss</groupId>
     <artifactId>aliyun-sdk-oss</artifactId>
     <version>3.10.2</version>
 </dependency>

创建config.properties配置文件

在原代码中,我们用到的AccessKey ID、AccessKey Secret、域名。短信签名以及短信模板都是固定不变的,因此我们可以将它们拿出来放到一个配置文件中。
#aliyun短信配置参数
aliyun.accessKeyId=LTAI5tLdwwPpCrJbzMdTdQ7w
aliyun.accessKeySecret=jnP9no9KhtsE4kVbqbV40JKCksCqy2
aliyun.endpoint=dysmsapi.aliyuncs.com
aliyun.signName=阿里云短信测试
aliyun.templateCode=SMS_154950909

创建applicationContext.xml配置文件

在配置文件中配置注解自动扫描,以及加载外部配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context.xsd">

    <!--  注解扫描  -->
    <context:component-scan base-package="com.it"/>
    <!--加载外部配置-->
    <context:property-placeholder location="classpath:config.properties"/>
</beans>

封装工具类

package com.it.sms;

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 org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component  //创建当前类的对象
public class MessageTemplate {

    @Value("${aliyun.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.endpoint}")
    private String endpoint;
    @Value("${aliyun.signName}")
    private String signName;
    @Value("${aliyun.templateCode}")
    private String templateCode;


    public void sendMessage(String phone,String code) throws Exception {
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = endpoint;
        Client client = new Client(config);
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setSignName(signName)
                .setTemplateCode(templateCode)
                .setPhoneNumbers(phone)
                .setTemplateParam("{\"code\":\""+code+"\"}");
        // 复制代码运行请自行打印 API 的返回值
        SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
        SendSmsResponseBody body = sendSmsResponse.getBody();
        System.out.println("短信发送结果:"+body.toString());//打印结果
    }
}

测试类

package com.it.sms;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.*;
//spring整合单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class MessageTemplateTest {

    @Autowired
    private MessageTemplate messageTemplate;

    @Test
    public void sendMessage() {

        try {
            messageTemplate.sendMessage("17809523930","1024");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
相关文章
|
5月前
|
Java
java实现动态验证码源代码——绘制验证码的jsp
java实现动态验证码源代码——绘制验证码的jsp
|
5月前
|
前端开发 Java
java实现动态验证码源代码——jsp页面
java实现动态验证码源代码——jsp页面
|
5月前
|
Java 机器人 网络安全
Java代码快速生成验证码
Java代码快速生成验证码
132 0
|
10天前
|
运维 监控 搜索推荐
阿里大鱼进行发短信业务---使用详细步骤-Java操作
这篇文章详细介绍了如何在Java中使用阿里大鱼服务来发送短信,包括开通短信服务、签名和模板管理,以及具体的Java开发步骤和代码示例。
22 0
阿里大鱼进行发短信业务---使用详细步骤-Java操作
|
15天前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
17 1
|
5月前
|
JavaScript Java
java生成验证码并进行验证
java生成验证码并进行验证
|
4月前
|
存储 NoSQL Java
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
84 0
|
5月前
|
Java
JAVA生产随机生成验证码
Java代码实现随机生成指定位数的数字、大小写字母混合的验证码。使用`Random`类生成类型(0-数字,1-大写字母,2-小写字母),然后根据类型转换为相应字符。示例代码展示了一个4位验证码的生成,并附有实现结果图和过程分析。
198 2
|
5月前
|
安全 JavaScript 小程序
java 实现短信验证码
java 实现短信验证码
68 0
|
5月前
|
移动开发 前端开发 JavaScript
Java 验证码模块
Java 验证码模块