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

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

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


相关推荐

  • python协程系列_python asyncio

    python协程系列_python asyncio协程的定义协程(Coroutine),又称微线程,纤程。(协程是一种用户态的轻量级线程)作用:在执行A函数的时候,可以随时中断,去执行B函数,然后中断B函数,继续执行A函数(可以自动

    2022年7月29日
    11
  • Hasor Dataway使用教程

    Hasor Dataway使用教程绝了 这款工具让 SpringBoot 不再需要 Controller Service DAO Mapper 来自 开源中国 作者 哈库纳链接 https my oschina net ta8210 blog Dataway 介绍 Dataway 是基于 DataQL 服务聚合能力 为应用提供的一个接口配置工具 使得使用者无需开发任何代码就配置一个满足需求的接口 整个接口配置 测试 冒烟 发布 一站式都通过 Dataway 提供的 UI 界面完成 UI 会以 Jar 包方式提供

    2026年3月17日
    2
  • 旁站,子域名,C段的含义

    旁站,子域名,C段的含义本人 freebuf 文章 https www freebuf com articles web 264600 html 旁站什么是旁站 什么是旁站入侵 百度百科里面旁站的意思是 这是百度百科的意思 假如你知道旁站入侵 明显觉得他的理解不是正确的 从白帽子的观点来看的话 旁站入侵怎么可能是工程监理呢 理解旁站入侵旁站入侵就是旁边的站点 所以叫它旁站 比如我们在入侵目标网站的时候 我们没有发现什么漏洞无法拿下的时候 我们会选择旁站入侵 旁站入侵就是找和目标网站同服务器下的某一个网站 从那里突破拿到旁

    2026年3月17日
    3
  • UCGUI的消息处理

    UCGUI的消息处理一 各种基本消息介绍及处理流程对话框内部消息流转及外部消息 LOOP 分析 nbsp UCGUI 是采用的消息驱动的 它专门有对外的一套收集消息的接口 我在模似器中 就是通过 LCD 模拟显示屏窗口的 MOUSE 消息 将 MOUSE 消息传入到这个接口中 以驱动 UCGUI 中的窗体的 UCGUI 中的消息驱动其实与 WINDOWS 的是类似的 几种基本的消息与 WINDOWS 是

    2026年3月17日
    2
  • 开发网络游戏的成本(经营成本与总成本区别)

    开发一个网络游戏以开发团队30人,开发周期18个月,人均月成本1万元计算.(这个是概数),约为540万.计算技术购买,测试服务器费用等等等等其他一切费用,普通国产网络游戏开发成本应该在600-1000万之间.运营成本.假设准备做到在线5万人,以平均10台服务器/组,5000人/组承载计算,约需10组,100台服务器.算上网站服务器,备用服务器等等,120台服务器投入是比较保守的估计.以单台平…

    2022年4月15日
    297
  • BCP 命令

    BCP 命令br bcp 实用工具可以在 MicrosoftSQL 实例和用户指定格式的数据文件间大容量复制数据 使用 bcp 实用工具可以将大量新行导入 SQLServer 表 或将表数据导入数据文件 除非与 queryout 选项一起使用 否则使用该实用工具不需要了解 Transact SQL 知识 若要将数据导入表中 必须使用为该表创建的格式文件 或者必须了解表的结构以及对于该表中的列有效的数据类型 br nbsp 有关用于 bcp 语法的语法约定 请参阅 Transact SQL 语法约定

    2026年3月18日
    3

发表回复

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

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