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: #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集成阿里云短信验证码相关推荐
- SpringBoot集成阿里云短信服务
SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...
- springboot集成阿里云短信服务,实现发送短信功能
springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...
- springboot 使用shiro集成阿里云短信验证码
目录 1.阿里云短信验证码服务 2.发送短信验证码 3.shiro配置多个realm 4.验证短信验证码 5.一些修改思路 引言:短信验证码是通过发送验证码到手机的一种有效的验证码系统,主要用于验证用 ...
- SpringBoot集成阿里云短信服务实现登录注册(超详细)
本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...
- Java SpringBoot集成阿里云短信与邮件服务
1.pom.xml导入jar包 <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><ar ...
- SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)
前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...
- Springboot整合阿里云短信服务
目录 一.阿里云短信配置 1.开通短信服务 2. 申请模板 3.申请签名 二.springboot中集成阿里云短信服务 0.pom中引入依赖 1.配置application.properties 2 ...
- 阿里云短信验证码实战
一.创建阿里云短信权限用户 1.登陆阿里云之后我们点击头像,接着点击AccessKey: 2.选择开始使用子用户 : 3.我们先要创建一个用户组: 4.依次点击新建的用户组--授权管理,给用户组授权, ...
- Java常用工具类-发短信(集成阿里云短信服务)
1.注册阿里账号并开通短信服务 注册阿里账号后,并进行个人或企业实名认证,实名认证后,才能开通短信服务. 界面如下: 2.获取AccessKey 参考获取AccessKey方法 创建成功后,如下图: ...
最新文章
- appium-chromedriver@3.0.1 npm ERR! code ELIFECYCLE npm ERR! errno 1
- Java泛型进阶 - 如何取出泛型类型参数
- Linux入门!Linux无法联网解决办法!CentOS7、VMPlayer、VMWareWorkstation16资源!VMWareWorkstation16序列号!VMware安装Centos7!
- java多线程遇到的问题_关于Java多线程遇到的问题.
- HDU 3333 Turing Tree(树状数组+离线处理+离散化)
- 【记录】Docker push 到dockerhub网站
- threejs 反锯齿,raser,特效发光
- aix下oracle备份脚本,AIX下oracle的自动备份
- 学习web前端要了解的HTML5知识有哪些?
- 利用HttpOnly来防御xss攻击
- VBS教程(入门级)
- c语言绕过dnf检测,过掉DNF游戏保护,仅供学习研究。不得用于非法途径
- OGG FOR BIGDATA 安装(修正)
- STM32开发笔记27:STM32L0低功耗设计——RTC模块1秒时钟的产生方法
- 链表综合案例(超市购物车)
- 1044 火星数字 ——c实现
- 计算机专业大学生新学期计划,大学生个人新学期计划
- 统计素数并求和,C语言
- 最新PHP/SG11扩展解密视频教程分享
- 出自名门:微软杀毒软件MSE 2.1 正式版下载
热门文章
- python opencv的函数cv2.LUT(src, lut, dst=None)的具体使用(LUT:查找表)
- 微信小程序-云函数获取用户openid
- HDOJ3018欧拉路,几笔画判断
- Android11 读写权限申请
- 国产开发板各项性能测试--米尔MYD-YT507H开发板
- iOS 自动布局报错:Unable to simultaneously satisfy constraints.
- Mac 退出与卸载 GlobalProtect
- 给软件添加注册码【笔记】
- 计算机体系结构在线读,计算机体系结构_arch01_intro-c1.pdf
- python数据分析之matplotlib(一)