SpringBoot怎么实现短信发送
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇"SpringBoot怎么实现短信发送"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
千家信息网最后更新 2024年11月26日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安全错误
数据库的锁怎样保障安全
西安管家婆软件开发
网络安全阀门怎么安装
网络安全法规定网络维护
系统网络安全工作责任制实施细则
电子商务网络安全基本模型有
医院的关系型数据库开发
互联网基本服务的服务器是什么
live数据库怎么下载
删除和恢复数据库
网络安全测评公司黑龙江
杭州手机app软件开发怎么选
网络安全政治心得1000
南平恒新网络技术工程
三亚机场网络安全演练
朗信网络安全签约项目
怎么样可以画出来一个网络安全
计算机网络技术好不好 知乎
美工软件开发
罗布乐思以前的服务器
数据库查看索引是否生效
HiveOS需要中转服务器吗
网络安全网友不是朋友
sql数据库被攻击
通信网络技术概述
计算机软件开发工程师工作伙伴
数据库中间的角色
杭州手机app软件开发怎么选
写字楼网络技术员
把json数据导入到数据库
报计算机网络技术能专升本吗