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: #keyIDaccessKeySecret: #KeySecret秘钥domain: dysmsapi.aliyuncs.com #固定regionId: cn-hangzhou #固定templateCode: #模板codesignName: #签名名称

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 SecretDefaultProfile 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);// 您申请的模板 coderequest.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.测试

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

springboot集成阿里云短信验证码相关推荐

  1. SpringBoot集成阿里云短信服务

    SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...

  2. springboot集成阿里云短信服务,实现发送短信功能

    springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...

  3. springboot 使用shiro集成阿里云短信验证码

    目录 1.阿里云短信验证码服务 2.发送短信验证码 3.shiro配置多个realm 4.验证短信验证码 5.一些修改思路 引言:短信验证码是通过发送验证码到手机的一种有效的验证码系统,主要用于验证用 ...

  4. SpringBoot集成阿里云短信服务实现登录注册(超详细)

    本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...

  5. Java SpringBoot集成阿里云短信与邮件服务

    1.pom.xml导入jar包 <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><ar ...

  6. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

  7. Springboot整合阿里云短信服务

    目录 一.阿里云短信配置 1.开通短信服务​ 2. 申请模板 3.申请签名 二.springboot中集成阿里云短信服务 0.pom中引入依赖 1.配置application.properties 2 ...

  8. 阿里云短信验证码实战

    一.创建阿里云短信权限用户 1.登陆阿里云之后我们点击头像,接着点击AccessKey: 2.选择开始使用子用户 : 3.我们先要创建一个用户组: 4.依次点击新建的用户组--授权管理,给用户组授权, ...

  9. Java常用工具类-发短信(集成阿里云短信服务)

    1.注册阿里账号并开通短信服务 注册阿里账号后,并进行个人或企业实名认证,实名认证后,才能开通短信服务. 界面如下: 2.获取AccessKey 参考获取AccessKey方法 创建成功后,如下图: ...

最新文章

  1. appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
  2. Java泛型进阶 - 如何取出泛型类型参数
  3. Linux入门!Linux无法联网解决办法!CentOS7、VMPlayer、VMWareWorkstation16资源!VMWareWorkstation16序列号!VMware安装Centos7!
  4. java多线程遇到的问题_关于Java多线程遇到的问题.
  5. HDU 3333 Turing Tree(树状数组+离线处理+离散化)
  6. 【记录】Docker push 到dockerhub网站
  7. threejs 反锯齿,raser,特效发光
  8. aix下oracle备份脚本,AIX下oracle的自动备份
  9. 学习web前端要了解的HTML5知识有哪些?
  10. 利用HttpOnly来防御xss攻击
  11. VBS教程(入门级)
  12. c语言绕过dnf检测,过掉DNF游戏保护,仅供学习研究。不得用于非法途径
  13. OGG FOR BIGDATA 安装(修正)
  14. STM32开发笔记27:STM32L0低功耗设计——RTC模块1秒时钟的产生方法
  15. 链表综合案例(超市购物车)
  16. 1044 火星数字 ——c实现
  17. 计算机专业大学生新学期计划,大学生个人新学期计划
  18. 统计素数并求和,C语言
  19. 最新PHP/SG11扩展解密视频教程分享
  20. 出自名门:微软杀毒软件MSE 2.1 正式版下载

热门文章

  1. python opencv的函数cv2.LUT(src, lut, dst=None)的具体使用(LUT:查找表)
  2. 微信小程序-云函数获取用户openid
  3. HDOJ3018欧拉路,几笔画判断
  4. Android11 读写权限申请
  5. 国产开发板各项性能测试--米尔MYD-YT507H开发板
  6. iOS 自动布局报错:Unable to simultaneously satisfy constraints.
  7. Mac 退出与卸载 GlobalProtect
  8. 给软件添加注册码【笔记】
  9. 计算机体系结构在线读,计算机体系结构_arch01_intro-c1.pdf
  10. python数据分析之matplotlib(一)