- 准备工作
- 开通短信服务(可参考博主的“手机短信验证码”)
- 如果开通不成功,就只能借下别人已经开通好的短信,如果不想重复,可在其下创建一个新的模板管理
- 这里只是介绍如何使用
- 导入依赖
<!--aliyun-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
发送验证码到手机上,验证码生成工具类(内容较为固定,也可根据需求改)
package com.xsha.msmservice.utils;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
/**
* 说明:短信配置
* 作者:FH Admin
* from:fhadmin.cn
*/
public class RandomUtil {
private static final Random random = new Random();
private static final DecimalFormat fourdf = new DecimalFormat("0000");
private static final DecimalFormat sixdf = new DecimalFormat("000000");
public static String getFourBitRandom() {
return fourdf.format(random.nextInt(10000));
}
public static String getSixBitRandom() {
return sixdf.format(random.nextInt(1000000));
}
/**
* 给定数组,抽取n个数据
* @param list
* @param n
* @return
*/
public static ArrayList getRandom(List list, int n) {
Random random = new Random();
HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
// 生成随机数字并存入HashMap
for (int i = 0; i < list.size(); i++) {
int number = random.nextInt(100) + 1;
hashMap.put(number, i);
}
// 从HashMap导入数组
Object[] robjs = hashMap.values().toArray();
ArrayList r = new ArrayList();
// 遍历数组并打印数据
for (int i = 0; i < n; i++) {
r.add(list.get((int) robjs[i]));
System.out.print(list.get((int) robjs[i]) + "\t");
}
System.out.print("\n");
return r;
}
}
发送验证码,验证码是有有效时间的(时间可以自己设置)
这里可以创建常量类读取配置文件的阿里云密钥等信息(可参考博主的“对象存储”)
package com.xsha.msmservice.service.impl;
import com.alibaba.fastjson.JSONObject;
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.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xsha.msmservice.service.MsmService;
import com.xsha.msmservice.utils.RandomUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* 说明:短信配置
* 作者:FH Admin
* from:fhadmin.cn
*/
@Service
public class MsmServiceImpl implements MsmService {
// 注入redis缓存对象
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Override
public boolean sendMessage(String phone) {
if(StringUtils.isEmpty(phone)) return false;
// 先获取手机号对应的验证码(该验证码没过期)
String code = redisTemplate.opsForValue().get(phone);
if(!StringUtils.isEmpty(code)) {
return true;
}
// 过期则生成随机验证码,并在发送之后向redis中存入手机号对应的验证码
code = RandomUtil.getFourBitRandom();
Map<String, Object> map = new HashMap<>();
map.put("code", code);
// 设置短信配置
DefaultProfile profile = DefaultProfile.getProfile("your region", "your accessId", "your accessSecret");
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(phone);//接收短信的手机号码
request.setSignName("your signature name");//短信签名名称
request.setTemplateCode("your template");//短信模板CODE
request.setTemplateParam(JSONObject.toJSONString(map));//短信模板变量对应的实际值
try {
SendSmsResponse response = client.getAcsResponse(request);
// 发送短信,尽量打印出来是否发送成功
new Gson().toJson(response);
// 将验证码放置在redis缓存中,并设置5分钟有效时间,最后一个参数是单位
redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
} catch (ServerException e) {
e.printStackTrace();
return false;
} catch (ClientException e) {
e.printStackTrace();
return false;
}
return true;
}
}
相关推荐
springboot整合阿里云发送短信demo
springboot 集成kettle核心包依赖文件配置信息pom.xml
阿里云java短信验证码源码 springboot-learning-3 springboot框架相关技术的案例项目及使用springboot框架时的需注意点(接着springboot-learning-2仓库) 项目介绍 SpringBoot整合框架各种实用的组件技术点以及一些...
内容只为接口开发,配合前端和移动app调用使用,不包含html页面,基于springboot+oauth2.0+jwttoken鉴权(内有怎么使用redistoken和数据库token注释)+restful风格+阿里短信+阿里消息推送+车牌识别等。该项目为工作...
使用JWT实现单点登录,图片和文档上传使用阿里的OSS对象存储,短信功能使用腾讯云的接口,聊天功能使用了WebSocket实现实时聊天,整合Quartz框架实现定时任务的发布,整合了redis存储验证码。本系统使用的技术均吻合...
整合springboot+spingsecurity+jwt+maven+mybatis+redis+mysql+阿里云短信服务+各种电商页面的后端功能
项目部署上采用Doker虚拟化技术部署在自己的阿里云上,整合合Nginx、Haproxy和keepalived,从数据库到后端、前端均采用多节点负载均衡策略部署。 整个项目用的都是目前主流的技术,覆盖前后端各个技术的基础,从...
阿里云短信服务 内置事件发布(Spring Event) 目录概述 . framework ├── converter ├── enums ├── event ├── model ├── security │ ├── delegate │ ├── jdbc │ ├── properties │ └─...
该资源是一个基于SpringBoot、微信小程序和...5. 服务器:部署在云服务器上,如阿里云、腾讯云等。 通过这些技术的整合,实现了一个功能完善、操作简便的小演员招募小程序,为剧组和小演员提供了一个便捷的沟通平台。
毕设项目 项目总体分为两个大模块,即用户端和管理端。使用springboot减少配置和整合 难度管理端使用shiro管理用户权限,相对应权限的... 注册认证和地图服务调用了webservice,分别为阿里云的服务和百度提供的服务。
jun_plugin整合Java企业级各种开发组件,开箱即用,不写重复代码 笔者其他项目功能实现和使用 jun_springboot: jun_springcloud: 基础篇:企业级开发组件功能列表(jun_plugin) 【fastdfs-client-java】 【jun_...
jun_plugin项目项目说明jun_plugin整合Java企业级各种开发组件,开箱即用,不写重复代码笔者其他项目功能实现和使用jun_springboot:jun_springcloud:基础篇:企业级开发组件功能列表(jun_plugin) 【fastdfs-...
数据库服务:存储用户信息、商品信息、交易记录等数据,可能使用了云数据库如阿里云RDS、腾讯云数据库等。 支付接口:整合微信支付,实现在线交易的支付功能。 身份认证:利用微信的用户身份认证体系,确保用户...
整合 Sentinel,对服务及 API 进行流量控制、熔断降级、系统负载等功能保护,为微服务保驾护航。完善的 RBAC 权限控制,用户信息通过网关解析到请求头,随后通过自定义注解 @RequireRole @RequirePermission,可以...