springboot集成阿里云短信验证码

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

1.添加pom.xml依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.4.6</version>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>2.1.0</version>
</dependency>

2.application.yml添加配置文件

#短信
sms:
  aliyun:
    accessKeyID: #keyID
    accessKeySecret: #KeySecret秘钥
    domain: dysmsapi.aliyuncs.com #固定
    regionId: cn-hangzhou #固定
    templateCode: #模板code
    signName: #签名名称

3.创建随机验证码工具类

public class RandomUtils {
	 
	private static final String[] ARR = {"0","1","2","3","4","5","6","7","8","9"};
    private static final Random random = new Random();
 
    /**
     * 生成指定长度随机数(数字)
     * @param length 长度
     * @return 验证码
     */
    public static String createRandomInt(int length){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(ARR.length);
            sb.append(ARR[index]);
        }
        return sb.toString();
    }
}

4.创建发送验证码工具类

import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
@Component
public class SendSmsUtils {
	private static Logger log = LoggerFactory.getLogger(SendSmsUtils.class);

	//aliyuncs的参数
    private static String accessKeyID;

    private static String accessKeySecret;

    //短信api的请求地址  固定
    private static String domain;

    //指定地域名称 短信API的就是 cn-hangzhou 不能改变
    private static String regionId;

    //您的申请签名
    private static String signName;

    //你的模板
    private static String templateCode;

    /**
     * 发送短信接口
     *
     * @param phoneNum 手机号
     * @return 验证码
     */
    public static String sendSms(String phoneNum) {
    	String code = RandomUtils.createRandomInt(6);

        // 指定地域名称 短信API的就是 cn-hangzhou 不能改变  后边填写您的  accessKey 和 accessKey Secret
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret);
        IAcsClient client = new DefaultAcsClient(profile);

        // 创建通用的请求对象
        CommonRequest request = new CommonRequest();
        // 指定请求方式
        request.setSysMethod(MethodType.POST);
        // 短信api的请求地址  固定
        request.setSysDomain(domain);
        //签名算法版本  固定
        request.setSysVersion("2017-05-25");
        //请求 API 的名称
        request.setSysAction("SendSms");
        //指定地域名称
        request.putQueryParameter("RegionId", regionId);
        // 要给哪个手机号发送短信  指定手机号
        request.putQueryParameter("PhoneNumbers", phoneNum);
        // 您的申请签名
        request.putQueryParameter("SignName", signName);
        // 您申请的模板 code
        request.putQueryParameter("TemplateCode", templateCode);

        Map<String, Object> params = new HashMap<>();
        //这里的key就是短信模板中的 ${xxxx}
        params.put("code", code);

        // 放入参数  需要把 map转换为json格式  使用fastJson进行转换
        request.putQueryParameter("TemplateParam", JSON.toJSONString(params));

        try {
            CommonResponse response = client.getCommonResponse(request);
            log.info(JSON.parseObject(response.getData(), Map.class).get("Message").toString());
            if(response.getHttpResponse().isSuccess()) {
            	return code;
            }
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static String getAccessKeyID() {
		return accessKeyID;
	}
    @Value("${sms.aliyun.accessKeyID}")
	public void setAccessKeyID(String accessKeyID) {
		SendSmsUtils.accessKeyID = accessKeyID;
	}

	public static String getAccessKeySecret() {
		return accessKeySecret;
	}
	@Value("${sms.aliyun.accessKeySecret}")
	public void setAccessKeySecret(String accessKeySecret) {
		SendSmsUtils.accessKeySecret = accessKeySecret;
	}

	public static String getDomain() {
		return domain;
	}
	@Value("${sms.aliyun.domain}")
	public void setDomain(String domain) {
		SendSmsUtils.domain = domain;
	}

	public static String getRegionId() {
		return regionId;
	}
	@Value("${sms.aliyun.regionId}")
	public void setRegionId(String regionId) {
		SendSmsUtils.regionId = regionId;
	}

	public static String getSignName() {
		return signName;
	}
	@Value("${sms.aliyun.signName}")
	public void setSignName(String signName) {
		SendSmsUtils.signName = signName;
	}

	public static String getTemplateCode() {
		return templateCode;
	}
	@Value("${sms.aliyun.templateCode}")
	public void setTemplateCode(String templateCode) {
		SendSmsUtils.templateCode = templateCode;
	}

}

注意事项:在application.yml中配置了accessKeyID等参数,想在一个工具类里面的静态方法使用,于是使用了静态变量。使用@Value注解获取值,如下:

@Value("${sms.aliyun.accessKeyID}")
private static String accessKeyID;

debug发现获取不到,为null。原因如下:

  • spring不允许/不支持把值注入到静态变量中;
  • Spring的@Value依赖注入是依赖set方法;
  • set方法是普通的对象方法;
  • static变量是类的属性,static没有set方法。

 解决办法,把@Value注解放到set方法上,去除set方法static关键字。如下:

//aliyuncs的参数
private static String accessKeyID;

@Value("${sms.aliyun.accessKeyID}")
public void setAccessKeyID(String accessKeyID) {
	SendSmsUtils.accessKeyID = accessKeyID;
}
public static String getAccessKeyID() {
	return accessKeyID;
}

 同时,工具类还需要交给spring管理,在类上添加注解@Component

5.测试文章来源地址https://www.toymoban.com/news/detail-427195.html

@GetMapping("sms")
public ResponseBo sms(String phone) {
    String code = SendSmsUtils.sendSms(phone);
    System.out.println(code);
    return ResponseBo.ok(code);
}

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

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

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

相关文章

  • 集成SpringCloudAlibaba短信服务 短信验证码

    1.1 SpringCloudAlibaba短信服务简介 短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。 产品优势:覆盖全面、高并发处理、消息堆积处理、开发管理简单、智能监控调度 产品功能:短信通知、短信验证码、推广短信、异步通知、数据统计 应用场景:短信

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

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

    2024年02月02日
    浏览(52)
  • 阿里云短信验证码实战

    一、创建阿里云短信权限用户 1、登陆阿里云之后我们点击头像,接着点击AccessKey: 2、选择开始使用子用户 : 3、我们先要创建一个用户组: 4、依次点击新建的用户组——授权管理,给用户组授权,开通短信验证码服务: 5、接着我们新建一个用户(具体用来操作的账号),

    2023年04月22日
    浏览(44)
  • SpringBoot中pom.xml配置详解

    前言 在Spring Boot开发中,配置文件是非常重要的一部分,而yml文件作为一种常用的配置文件格式,被广泛应用于Spring Boot项目中。Spring Boot提供了多种方式来读取yml文件中的属性值,开发者可以根据具体的需求和场景选择合适的方式。本文将介绍Spring Boot读取yml文件的主要方式

    2024年02月07日
    浏览(39)
  • 短信验证码的实现(阿里云)

    背景:目前在很多项目中都出现使用短信验证码来实现注册、登录、购买、支付、转账等功能,发短信功能几乎已经成为项目中不可或缺的技术之一。 选择一个合适的编程语言,例如Python、Java或PHP等。 寻找能够发送短信的API,例如Twilio、阿里云短信等。 注册并获取API的账号

    2024年02月15日
    浏览(46)
  • 基于阿里云服务实现短信验证码功能

    阿里云短信服务是一项基于云计算和大数据技术的企业级短信平台服务。它能够为企业和开发者提供高可用、高性能、高稳定性的短信发送服务,可以快速地将各类业务通知、验证码、营销推广等信息发送给用户。在我们经常登录一些系统或者APP时候,经常会遇到其他登录登

    2024年02月14日
    浏览(52)
  • 在阿里云请求发短信接口去掉证书验证

    composer require alibabacloud/dysmsapi-20170525 2.0.23   cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dysmsapi.aliyuncs.com/?PhoneNumbers= 两种方法 第一个直接关闭验证 vendorguzzlehttpguzzlesrcHandlerCurlFactory.php 362行 $conf[CURLOPT_S

    2024年02月10日
    浏览(51)
  • TP6----------阿里云短信包验证码登录

    首先开通阿里云短信包,之后申请短信包签名,这里大家自行去阿里云申请 安装阿里云sdk 首先创建Sample类方便调用,我们需要有短信签名,签名模板,阿里云keyId和accessKeySecret 阿里云key在阿里云首页,右上角有个acesskey管理就可以看到 Sample.php文件 业务逻辑层生成随机验证码

    2024年02月15日
    浏览(67)
  • 阿里云 短信服务——开启验证码防盗刷监控

    由于公司的业务要求,目前正在了解并运用阿里云的短信服务。 在短信服务这儿块由于涉及到每条短信都需要花费一定的费用,以及每条短信都会与用户进行信息交互,所以在这块儿的别需要注重短信的安全问题。本篇博客主要介绍阿里云短信服务如何开启验证码防盗刷监控

    2024年02月05日
    浏览(42)
  • 【java】【springboot】【idea】springboot项目pom.xml 灰色下划线

    解决方案: 这里我们找到了原因,就是因为选择了Ignored Files导致pom.xml文件被设置在maven忽略文件清单中,所以我们将打勾的选项取消,点击Apply,然后点击OK

    2024年02月11日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包