大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
技术分享交流群:1125844267,大家可以进来唠嗑闲聊
前言
目前阿里短信不支持个人申请签名和模板,所以只能使用测试版固定的签名和模板
提示:以下是本篇文章正文内容,下面案例可供参考
一、控制台配置
1、进入阿里云官网,搜索“短信服务”进行购买
2、配置用户组和用户,获取AccessKey ID和AccessKey Secret
我们当然可以直接使用第一个“继续使用AccessKey”来直接创建AccessKey,但是为了安全(人家也有安全提示),所以咱就听话使用第二个。点击进入后配置用户组,添加关于短信的权限,然后添加一个用户,属于短信这个用户组,这个用户就自动拥有的用户组所拥有的短信权限。
创建用户的时候一定要记得勾选这个,并且记下来AccessKey Secret,因为只显示一次,之后就没了。
二、代码实现
上边直接点击进去就有阿里提供的各种语言的发送短信的代码
它有一个同步的代码和一个异步的代码,异步的按它的代码放到项目中报错,所以直接用的同步的
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.9</version>
</dependency>
/** * 发送短信工具类 */
public class SendSMS {
/** * 使用AK&SK初始化账号Client * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */
public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
}
import org.apache.commons.lang3.RandomStringUtils;
=======================================================
String code = RandomStringUtils.randomNumeric(4); //生成四位数字的验证码
com.aliyun.dysmsapi20170525.Client client = SendSMS.createClient(accessKeyId, accessKeySecret); //参数用你真实的替换
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setSignName("阿里云短信测试") //签名,测试只能这么写
.setTemplateCode("SMS_154950909") //测试模板(固定)
.setPhoneNumbers(phone) //手机号
.setTemplateParam("{\"code\":\""+code+"\"}");
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse result = client.sendSms(sendSmsRequest);
log.info("短信登录API返回的状态码描述:{}",result.getBody().getMessage());
if("OK".equalsIgnoreCase(result.getBody().getCode())){
//OK表明发送成功,将验证码保存到redis,设置过期时间为5分钟
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
return ResultData.success(messageUtil.message("messages.codeLoginTip1")); //根据自己的实际返回
}else {
return ResultData.error(messageUtil.message("messages.codeLoginTip2")); //根据自己的实际返回
}
验证的时候从redis中取出对应手机号的验证码。我这是集成到Oauth2中的短信登录,参数获取可能不太一样,但是验证逻辑肯定都是一样的
String mobile = httpServletRequest.getParameter("mobile");
String codeRequest = httpServletRequest.getParameter("code");
String codeRedis = redisTemplate.opsForValue().get(mobile) == null ? "" : String.valueOf(redisTemplate.opsForValue().get(mobile));
SysUser sysUser = userService.getUserByMobile(mobile);
if(sysUser == null){
//throw new SessionAuthenticationException("该手机号不是系统注册用户");
throw new SessionAuthenticationException("messages.codeLoginTip1");
}
if(StringUtils.isEmpty(mobile)){
//throw new SessionAuthenticationException("手机号不能为空");
throw new SessionAuthenticationException("messages.codeLoginTip2");
}
if(StringUtils.isEmpty(codeRequest)){
//throw new SessionAuthenticationException("短信验证码不能为空");
throw new SessionAuthenticationException("messages.codeLoginTip3");
}
if(StringUtils.isEmpty(codeRedis)){
//throw new SessionAuthenticationException("短信验证码已过期");
throw new SessionAuthenticationException("messages.codeLoginTip4");
}
if(!codeRequest.equals(codeRedis)){
//throw new SessionAuthenticationException("短信验证码不正确");
throw new SessionAuthenticationException("messages.codeLoginTip5");
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/213480.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...