SpringBoot怎么实现短信发送
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇"SpringBoot怎么实现短信发送"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
千家信息网最后更新 2025年01月20日SpringBoot怎么实现短信发送
这篇"SpringBoot怎么实现短信发送"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"SpringBoot怎么实现短信发送"文章吧。
application.properties:
server.port=8002#server.servlet.context-path=/spring.datasource.url=jdbc:mysql://localhost:3306/ssm_message?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=19961117Lhhspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#开启驼峰命名mybatis.configuration.map-underscore-to-camel-case=true#设置超时时间-可自行调整sms.default.connect.timeout=sun.net.client.defaultConnectTimeoutsms.default.read.timeout=sun.net.client.defaultReadTimeoutsms.timeout=10000#初始化ascClient需要的几个参数#短信API产品名称(短信产品名固定,无需修改)sms.product=Dysmsapi#短信API产品域名(接口地址固定,无需修改)sms.domain=dysmsapi.aliyuncs.com#替换成你的AK (产品密)#你的accessKeyId,填你自己的 上文配置所得 自行配置sms.access.key.id=xxxx#你的accessKeyId,填你自己的 上文配置所得 自行配置sms.access.key.secret=xxxx#阿里云配置你自己的短信模板填入sms.template.code=SMS_238470888
messageController
package com.example.demo.controller;import com.alibaba.fastjson.JSON;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;import com.example.demo.service.MessageService;import com.example.demo.utils.MessageUtils;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import java.util.Map;@Api(description = "短信接口")@RequestMapping("/smsLogin")@RestControllerpublic class MessageController { @Autowired public MessageService messageService; @Autowired public MessageUtils messageUtils; @ApiOperation(value = "获取短信验证码接口", notes = "获取短信验证码接口") @GetMapping("/sendMessage") public MapgetSMSMessage(String phone) { Map map = new HashMap<>(); if (phone == null || phone == "") { map.put("code", "FAIL"); map.put("msg", "手机号为空"); return map; } Map smsMap = messageUtils.getPhoneMsg(phone); if("OK".equals(smsMap.get("status"))){ Map data = messageService.selectSMSDataByPhone(phone); map.put("phone", phone); map.put("smsCode", smsMap.get("msg")); // 将验证码存入数据库 也可以考虑用redis等方式 这里就用数据库做例子 if (data != null) { messageService.updateSMSDataByPhone(map); } else { messageService.insert(map); } smsMap.put("msg", "成功"); } return smsMap; } @ApiOperation(value = "短信校验登录接口", notes = "短信校验登录接口") @GetMapping("/login") public Map login(String phone, String smsCode) { Map map = new HashMap<>(); if (StringUtils.isEmpty(phone) || StringUtils.isEmpty(smsCode)) { map.put("code", "FAIL"); map.put("msg", "请检查数据"); return map; } // 取出对应的验证码进行比较即可 Map smsMap = messageService.selectSMSDataByPhone(phone); if (smsMap == null) { map.put("code", "FAIL"); map.put("msg", "该手机号未发送验证码"); return map; } String code = (String) smsMap.get("sms_code"); if (!smsCode.equals(code)) { map.put("code", "FAIL"); map.put("msg", "验证码不正确"); return map; } map.put("code", "OK"); map.put("msg", "success"); return map; }}
MessageUtils
package com.example.demo.utils;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.http.MethodType;import com.aliyuncs.profile.DefaultProfile;import com.aliyuncs.profile.IClientProfile;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Component;import org.springframework.web.client.RestTemplate;import java.util.HashMap;import java.util.Map;@Componentpublic class MessageUtils { @Autowired RestTemplate restTemplate; @Value("${sms.default.connect.timeout}") private String DEFAULT_CONNECT_TIMEOUT; @Value("${sms.default.read.timeout}") private String DEFAULT_READ_TIMEOUT; @Value("${sms.timeout}") private String SMS_TIMEOUT; @Value("${sms.product}") private String SMS_PRODUCT; @Value("${sms.domain}") private String SMS_DOMAIN; @Value("${sms.access.key.id}") private String SMS_ACCESSKEYID; @Value("${sms.access.key.secret}") private String SMS_ACCESSKEYSECRET; @Value("${sms.template.code}") private String TEMPLATE_CODE; private static String code;//code对应你短信目标里面的参数 public Map getPhoneMsg(String phone) { if (phone == null || phone == "") { System.out.println("手机号为空"); return null; } // 设置超时时间-可自行调整 System.setProperty(DEFAULT_CONNECT_TIMEOUT, SMS_TIMEOUT); System.setProperty(DEFAULT_READ_TIMEOUT, SMS_TIMEOUT); // 初始化ascClient需要的几个参数 final String product = SMS_PRODUCT; final String domain = SMS_DOMAIN; // 替换成你的AK final String accessKeyId = SMS_ACCESSKEYID; final String accessKeySecret = SMS_ACCESSKEYSECRET; // 初始化ascClient,暂时不支持多region IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); Map map = new HashMap(); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); //获取验证码 code = vcode(); IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 使用post提交 request.setMethod(MethodType.POST); // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 request.setPhoneNumbers(phone); // 必填:短信签名-可在短信控制台中找到 request.setSignName("java学习"); // 必填:短信模板-可在短信控制台中找到 request.setTemplateCode(TEMPLATE_CODE); // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为$[code]"时,此处的值为 // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败 request.setTemplateParam("{ \"code\":\"" + code + "\"}"); // 可选-上行短信扩展码(无特殊需求用户请忽略此字段) // request.setSmsUpExtendCode("90997"); // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); // 请求失败这里会抛ClientException异常 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); map.put("status", sendSmsResponse.getCode()); if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // 请求成功 map.put("msg", code); } else { //如果验证码出错,会输出错误码告诉你具体原因 map.put("msg", sendSmsResponse.getMessage()); } } catch (Exception e) { e.printStackTrace(); map.put("status", "FAIL"); map.put("msg", "获取短信验证码失败"); } return map; } /** * 生成6位随机数验证码 * * @return */ public static String vcode() { String vcode = ""; for (int i = 0; i < 6; i++) { vcode = vcode + (int) (Math.random() * 9); } return vcode; }}
以上就是关于"SpringBoot怎么实现短信发送"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
短信
验证
内容
接口
手机
配置
产品
手机号
模板
短信发送
参数
数据
成功
上文
可在
字段
所得
换行符
控制台
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
暗黑3数据库app
软件开发修改记录
山东电信服务器云空间
大型服务器生存视频第二集
数据库分表实现
电脑对电脑数据库怎么连接
nba捏脸数据库
软件开发项目实训的目的
构建网络安全风险防控
彩虹六号服务器掉线问题
面试软件开发公司吗
服务器 功率 发热量换算
终端软件开发现状
网络安全的重要性特点
数据库主要研究对象
电脑中激活服务器不可用
静态方法调用数据库
手机我的世界服务器群
香港云服务器恒创科技信赖
ssr服务器共享
db2数据库实例查看
传奇4国际服是一个服务器吗
关于微信网络安全要求通知
软件开发问题及解决策略
如何将网页的数据存到数据库
网络安全句子
win如何添加屏蔽服务器
浏阳安卓软件开发
天津党建设计软件开发
软件开发需求分析范例