概述
java实现阿里云短信验证登录
首先要获取四个服务器参数,如果不能登录阿里云管理对应的服务器,找你的服务器提供者要(你的项目经理,你的老板)
参数:AccessKeyID,AccessKeySecret,短信签名,模板code
依赖
<!--阿里短信服务相关jar包-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version> <!-- 注:如提示报错,先升级基础包版,无法解决可联系技术支持 -->
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
package com.ruoyi.web.slweb.controller;
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.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.TimeUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("aliSmsUtil")
@Api(tags = "验证手机号")
public class AliSmsUtil {
// 所有参数,可自定义根据需求,配置成application.properties 用@value()注入
/**
* 产品名称: 云通信短信API产品,开发者无需替换
*/
static final String PRODUCT = "Dysmsapi";
/**
* 产品域名,开发者无需更换
*/
static final String DOMAIN = "dysmsapi.aliyuncs.com";
/**
* 开发者自己的AccessKeyID
*/
static final String ACCESS_KEYID = "自己的AccessKeyID";
/**
* 开发者自己的AccessKeySecret
*/
static final String ACCESSKEY_SECRET = "自己的AccessKeySecret";
/**
* 短信签名--可在短信控制台中找到
*/
static final String SIGN = "自己的短信签名";
/**
* IAcsClient是aliyun-java-sdk-green的Java客户端。使用aliyun-java-sdk-green Java SDK发起请求前,您需要初始化一个IAcsClient实例,并根据需要修改IClientProfile的配置项。
*/
public IAcsClient acsClient;
@Autowired
public RedisTemplate redisTemplate;
/**
* 模板code
*/
private static final String templateCode = "自己的模板code";
/**
* 配置超时时间,初始化acsClient
*
* @return
* @throws
*/
public IAcsClient getInstant() throws ClientException {
if (acsClient == null) {
// 配置超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEYID, ACCESSKEY_SECRET);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
return acsClient = new DefaultAcsClient(profile);
}
return acsClient;
}
/**
* 创建短信发送请求
* @param mobile 手机号
* @param jsonObject json数据
* @param templateCode 短信模板
* @return
* @throws ClientException
*/
public SendSmsResponse getSmsCodeClient(String mobile, JSONObject jsonObject, String templateCode) throws ClientException {
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//修改数据提交方式
request.setMethod(MethodType.POST);
//修改数据交互格式
request.setAcceptFormat(FormatType.JSON);
//必填:待发送手机号
request.setPhoneNumbers(mobile);
//必填:短信签名-可在短信控制台中找到
request.setSignName(SIGN);
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam(jsonObject.toString());
return getInstant().getAcsResponse(request);
}
/**
* 发送短信
*
* @param mobile 手机号码
* @return
*/
@GetMapping("sendSms")
@ApiOperation("发送短信")
public AjaxResult sendSms(@RequestParam("mobile") String mobile) {
SendSmsResponse smsResponse = null;
JSONObject jsonObject = new JSONObject();
//获取一个长度为6的验证码
Integer randomNumber = getRandomStr(6, 1);
//将验证码放入缓存,手机号和验证码作为key
redisTemplate.opsForValue().set(mobile+randomNumber,randomNumber,15, TimeUnit.MINUTES);
jsonObject.put("code",randomNumber);
try{
smsResponse = getSmsCodeClient(mobile,jsonObject,templateCode);
} catch (ClientException e) {
e.printStackTrace();
}
// 发生业务错误
if ("isv.BUSINESS_LIMIT_CONTROL".equals(smsResponse.getCode())) {
String message = smsResponse.getMessage();
String limitNum = message.substring(message.length() - 1);
if ("5".equals(limitNum)) {
// 此处可自定义业务异常
throw new RuntimeException("获取次数已达上线,请过一小时再试");
} else if (limitNum.equals("0")) {
throw new RuntimeException("获取次数已达上线,请明日再试");
} else if (limitNum.equals("1")) {
throw new RuntimeException("获取次数已达上线,请过一分钟再试");
}
}
return AjaxResult.success(smsResponse);
}
/**
* 获取验证码
* @param strSize 验证码长度
* @param size 获取个数
* @return
*/
public static Integer getRandomStr(int strSize, int size) {
List<Character> list = Arrays.asList('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
int a = 0;
List<String> resultList = new ArrayList<>();
StringBuilder str = new StringBuilder();
int lSize = list.size();
for (int s = 0; s < size; s++) {
str.delete(0, strSize);
for (int j = 0; j < strSize; j++) {
a = (int) (Math.random() * lSize);
str.append(list.get(a));
}
resultList.add(str.toString());
}
return Integer.valueOf(resultList.get(0));
}
}
最后
以上就是有魅力芹菜为你收集整理的java实现阿里云短信验证登录的全部内容,希望文章能够帮你解决java实现阿里云短信验证登录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复