阿里短信服务集成_阿里短信发送平台

阿里短信服务集成_阿里短信发送平台阿里短信集成,配置流程,代码实现

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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>

Jetbrains全家桶1年46,售后保障稳定

/** * 发送短信工具类 */
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");
                }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213480.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」

    Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」运行环境:开发工具:IDEA/Eclipse数据库:MYSQL5.7应用服务:Tomcat7/Tomcat8使用框架springboot+vue项目介绍影城管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台:首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。由于本网站的功能模块设计比较全面,所以使得整个影城管理系统信息管理的过程得以实现。效果图控制器类

    2022年8月22日
    9
  • MPQ Storm库 源代码分析 一个

    MPQ Storm库 源代码分析 一个

    2022年1月8日
    31
  • Flume概念与原理、与Kafka优势对比

    Flume概念与原理、与Kafka优势对比1 背景 nbsp nbsp nbsp flume 是由 cloudera 软件公司产出的可分布式日志收集系统 后与 2009 年被捐赠了 apache 软件基金会 为 hadoop 相关组件之一 尤其近几年随着 flume 的不断被完善以及升级版本的逐一推出 特别是 flume ng 同时 flume 内部的各种组件不断丰富 用户在开发的过程中使用的便利性得到很大的改善 现已成为 apachetop 项目之一 2 概述 nbsp nbsp 1 nbsp 什么是 f

    2025年12月8日
    5
  • Java NIO与IO的区别

    Java NIO与IO的区别Java.nio 俗称 New IO (从1.4开始),全称是Java Non-blocking IO,即非阻塞的IO,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络IO。

    2022年6月24日
    30
  • VBS整人代码(一串代码让全班同学说卧槽)

    一、做我女朋友吗,告白(抖音里很火的)无危害msgbox(“做我女朋友可以吗?”)msgbox(“房产证上写你名”)msgbox(“保大”)msgbox(“我妈会游泳”)m=MsgBox(“做我女朋友好吗?”,vbOKCancel)Ifm=vbOKThenMsgbox(“爱你么么哒”)Ifm=vbCancelThenMsgBox”不喜欢你了”,vbCrit…

    2022年4月9日
    4.8K
  • LeetCode – Refresh – Valid Palindrome

    LeetCode – Refresh – Valid Palindrome

    2021年9月4日
    79

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号