阿里云发送短信

1.具备条件

1.阿里云开通短信服务

进入阿里云搜索短信就有对应的短信服务,支付宝购买后进入短信控制台,会有对应的短信服务等信息。包括国内学习、业务统计、系统设置等。

注意:签名和模板不支持个人用户申请未上线业务

 2.控制台测试

填写对应信息即可,手机就会收到验证码信息。

 2.java整合短信服务

1.代码开发

1.获取 AccessKey和secret-key

因为之前做oss对象存储的时候已经获取过AccessKey和secret-key,所以需要在用户中绑定并授权短信服务即可。

 2.SpringBoot整合阿里云短信

首先看下官方文档的介绍与说明。

1.pom文件

<dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.18</version>
</dependency>

2.配置文件

 spring.cloud.nacos.discovery.server-addr:nacos服务注册地址

 alicloud.secrect-key:密钥

 alicloud.access-key:密钥

 sms.endpoint:地域节点

 sms.templateCode:模板

3.封装组件

其实就是把官方文档的代码拿过来自己用。

@Component
@Data
@ConfigurationProperties(prefix = "spring.cloud.alicloud.sms") //和配置文件绑定
public class SmsComponent {//    private String host;
//    private String path;
//    private String templateId;
//    private String appcode;@Value("${spring.cloud.alicloud.access-key}")private String accessId;@Value("${spring.cloud.alicloud.secret-key}")private String accessKey;/*** 配置文件对应的*/private String endpoint;private String templateCode;
//public void sendSmsCode(String phone,String code) throws Exception {
//
//
//        String method = "POST";
//
//        Map<String, String> headers = new HashMap<String, String>();
//        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
//        headers.put("Authorization", "APPCODE " + appcode);
//        //根据API的要求,定义相对应的Content-Type
//        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//        Map<String, String> querys = new HashMap<String, String>();
//        Map<String, String> bodys = new HashMap<String, String>();
//        bodys.put("mobile", phone);
//        bodys.put("tag", code);
//        bodys.put("templateId", templateId);
//
//
//        try {
//
//            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
//            System.out.println(response.toString());
//            //获取response的body
//            System.out.println(EntityUtils.toString(response.getEntity()));
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }Config config = new Config()// 您的 AccessKey ID.setAccessKeyId(accessId)// 您的 AccessKey Secret.setAccessKeySecret(accessKey);// 访问的域名config.endpoint = endpoint;Client client = new Client(config);SendSmsRequest sendSmsRequest = new SendSmsRequest().setSignName("阿里云短信测试").setTemplateCode(templateCode).setPhoneNumbers(phone).setTemplateParam("{\"code\":\""+code+"\"}");RuntimeOptions runtime = new RuntimeOptions();SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);System.out.println(sendSmsResponse);}}

4.发送短信接口

  @ResponseBody@GetMapping("/sms/sendCode")public R sendCode(@RequestParam("phone") String phone) throws Exception {String redisCode = stringRedisTemplate.opsForValue().get(AuthConstant.SMS_CODE_CACHE_PREFIX + phone);if (!StringUtils.isEmpty(redisCode)) {long currentTime = Long.parseLong(redisCode.split("_")[1]);//系统时间减去当前时间小于60s不能发送if (System.currentTimeMillis() - currentTime < 60000) {return R.error(BizCodeEnum.SMS_CODE_EXCEPTION.getCode(), BizCodeEnum.SMS_CODE_EXCEPTION.getMsg());}}//接口防刷//验证码的再次校验 redis保存 存key->手机号 value->验证码   sms:code:1234567898--->123456String code = UUID.randomUUID().toString().substring(0, 5);String subString = code + "_" + System.currentTimeMillis();//redis缓存验证码 防止同一个手机号在60s内再次发送验证码stringRedisTemplate.opsForValue().set(AuthConstant.SMS_CODE_CACHE_PREFIX + phone, subString, 10, TimeUnit.MINUTES);feignService.sendCode(phone, code);return R.ok();}

 需要将前端传递的手机号进行发送短信收取验证码判断,如果redis中为空调取短信发送服务(通过feign),如果redis不为空,判断系统时间减去当前时间小于60s不能发送,这样有效防止接口防刷恶意操作。前端注册通过手机号调起后端接口,后端通过uuid等技术生成验证码并调取短信服务接口,使用户收取验证码。

3.MD5&MD5盐值加密

1.MD5

Message Digest algorithm 5,信息摘要算法

  1. 压缩性:任意长度的数据,算出的 MD5 值长度都是固定的;
  2. 容易计算:从原数据计算出 MD5 值很容易;
  3. 抗修改性:对原数据进行任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都有很大区别;
  4. 强抗碰撞:想找到两个不同的数据,使它们具有相同的 MD5 值是非常困难的;
  5. 不可逆
 @Testvoid contextLoads() {//        e10adc3949ba59abbe56e057f20f883e
//        md5不能直接用来存储加密密码//可破解 值一直不变 抗修改性: 利用彩虹表 暴力破解法//        盐值加密
//        String s = DigestUtils.md5Hex("123456");
//        System.out.println(s);
//
//        //加盐:$1$+八位字符  每次盐值加密不一样
//        String s1 = Md5Crypt.md5Crypt(s.getBytes(),"$1$qwertyui");//$1$qwertyui$vP2GtrM4.h4RUK.3HGS9J.
//        System.out.println(s1);//BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();String encode = bCryptPasswordEncoder.encode("123456");
//        $2a$10$1lc96GWrG7.Lte4f9FsniOAUbpc4t4oaPhXpyG3OiLAxrfsjXqdB6
//        $2a$10$2gXOTIfzQDw4VYKhKWNWreNUxCiySPnhAhJiCVLTaXyo6vlPGDPbSboolean matches = bCryptPasswordEncoder.matches("123456", "$2a$10$2gXOTIfzQDw4VYKhKWNWreNUxCiySPnhAhJiCVLTaXyo6vlPGDPbS");System.out.println(encode+"========>"+matches);}

encode产生的和123456始终都会匹配。

 @Overridepublic MemberEntity login(MemberLoginVo vo) {//获取用户名String loginAccount = vo.getLoginAccount();//获取用户的密码String pagePassword = vo.getPassword();//去数据库查询MemberEntity memberEntity = baseMapper.selectOne(new QueryWrapper<MemberEntity>().eq("username", loginAccount).or().eq("mobile", loginAccount));if (memberEntity == null) {//登录失败return null;} else {//从数据库返回的密码字段值String password = memberEntity.getPassword();BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();//用页面提交的代码和数据库注册的盐值进行匹配boolean b = passwordEncoder.matches(pagePassword, password);if (b) {return memberEntity;} else {return null;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252200.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

android+发送短信的状态,Android--判断发送短信后的状态-发送成功Or发送失败.pdf

您所在位置&#xff1a;网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp手机开发 Android--判断发送短信后的状态-发送成功Or发送失败.pdf7页 本文档一共被下载&#xff1a;次,您可全文免费在线阅读后下载本文档。 下载提示 1.本站不保证该用户上…

怎样避免短信验证码发送失败

大家都知道生活中短信验证码是必不可少的&#xff0c;我们更改密码&#xff0c;确认身份还有日常交易&#xff0c;或者是使用app短信平台&#xff0c;都会接触到短信验证码&#xff0c;但是有时候会遇到点击“发送验证码”后没收到短信验证码的现象&#xff0c;这样对企业的发展…

android 发短信 oppo,OPPO R11短信发送失败怎么办?OPPO手机短信发送失败的解决方法...

OPPO手机短信发送失败的解决方法 短信发送不出去&#xff0c;一般是信息中心号码错误、号码欠费、网络基站接收转发异常、手机故障等原因导致&#xff0c;一起来看看有什么办法解决吧。 1、先看看其他联网操作是否可以进行&#xff0c;排查一下是否手机欠费&#xff0c;导致的短…

忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...

全世界只有3.14 % 的人关注了 爆炸吧知识 大家好&#xff0c;满肚子奇怪知识&#xff0c;用科学眼光看世界的小编又来了。 先问大家一个问题&#xff1a;你最喜欢看女孩子的哪里&#xff1f; 相信不少人&#xff0c;不论男女都想到了一个地方。 不论男女&#xff0c;都希望自己…

UE5数字人毛发衣服的替换以及动画蓝图放在哪里

文章目录 导入数字人相关资产开始替换衣服同属Bridge的MetaHuman替换用城市示例的衣服替换 开始替换毛发首先是同源的MetaHuman的毛发替换人群示例对MetaHuman的毛发替换【无法替换】 在哪里使用动画蓝图&#xff08;身体和人脸&#xff09;为什么只需要放一个身体的动画蓝图即…

GAN出一个女朋友

文章目录 GAN(生成对抗网络&#xff09;1. 生成对抗网络简述2.具体内容2.1 网络如何训练2.2 网络训练时会遇到的问题 3.GAN的发展4.GAN的代码实践4.1 基于GAN的mnist数据生成4.2 放大招—生成美女图片4.2.1 爬取美女图片4.2.2 提取人脸4.2.3 开始训练 GAN(生成对抗网络&#xf…

Multimodal Machine Learning:A Survey and Taxonomy 多模态机器学习:综述与分类

模态是指某种事物发生或经历的方式&#xff0c;每一种信息的来源或者形式&#xff0c;都可以称为一种模态。当研究问题包括多种这样的形态时&#xff0c;研究问题被描述为多模态。多模态机器学习&#xff0c;旨在通过机器学习的方法实现处理和理解多源模态信息的能力。 1.1 引…

小女生职场修行记

家是世界上唯一隐藏人类缺点与失败的地方&#xff0c;它同时也蕴藏着甜蜜的爱。——萧伯纳 老天&#xff0c;难道我就从此化蛹为蝶&#xff0c;从一个刚毕业的学生妹&#xff0c;直接升级成为都市白领&#xff1f; 我爱这个繁华的深圳&#xff0c;可是最怕夜晚&#xff0c;万…

声卡性能测试软件,RightMark Audio Analyzer音频声卡测试软件

RightMark Audio Analyzer即我们称为RMAA&#xff0c;是一款独立的音频系统测试工具&#xff0c;是由俄罗斯硬件资讯网站IXBT.com专门开发的&#xff0c;可以用来监测声卡&#xff0c;和其他实时声音设备的输出表现&#xff0c;软件简单易用&#xff0c;是一款普适的基准测试工…

电脑测试有声音软件没声音,Win7系统电脑没有声音了是声卡的问题吗?该怎么测试声卡?...

电脑没有声音的话也是个不大不小的问题。如果我们在玩游戏玩的正兴起&#xff0c;突然没有背景音乐的话&#xff0c;不免有些扫兴。所以我们就会开始检查是不是声卡坏了&#xff0c;那么要如何测试是不是声卡的问题呢?小编给大家带来了该如何测试声卡的具体图文解说&#xff0…

什么软件可以测试语音的声音,测试麦克风有没有声音,教你怎么测试麦克风有没有声音...

测试麦克风有没有声音?想必大家在购买了新的麦克风的时候&#xff0c;都会因为不确定麦克风是否能正常这个原因&#xff0c;所以都会都最近所购买的时候&#xff0c;都会测试麦克风有没有声音的问题&#xff0c;下面小编教你如何测试麦克风有没有声音吧。1&#xff0c;首先点击…

有什么可以测试耳机性能的软件吗,什么是耳机音质测试软件?

不存在耳机声音质量测试软件&#xff0c;因为耳机的声音质量受人的主观影响. 您认为耳机的音质不错&#xff0c;但是有些人认为它不正常. 标准&#xff0c;大多数人认为耳机的音质不错&#xff0c;那么实际上就是不错. 尽管不存在耳机音质测试软件&#xff0c;但仍有一些耳机音…

ppt中如何输入四线三格字体

方法一&#xff1a;PPT中安装如下字体

超简单傻瓜式开启移动IPV6公网方式

网上有很多移动IPV6公网打开的方式&#xff0c;但很多讲解有点复杂&#xff0c;我用最简单的方式来教你打开移动IPV6公网。 接下来进入正题&#xff0c;接步骤操作就行 1&#xff0c;浏览器输入192.168.1.1(如果你没改过的话&#xff09;输入超级管理员帐户CMCCAdmin密码aDm8…

ipv6是什么?ipv6怎么上网?

可能还有不少用户不知道ipv6是什么&#xff1f;其实ipv6是第六代互联网协议&#xff0c;是代替ipv4的下一代互联网协议&#xff0c;特点是具有更大的地址空间&#xff0c;更快的路由机制&#xff0c;更好的业务性能及更高的安全性优势。下面小编就来介绍一下ipv6设置上网教程。…

openwrt软路由实现ipv6 nat 上网配置

1、介绍 之前写的 《openwrt软路由实现ipv6上网配置》文档&#xff0c;经过长期的使用测试和网友评论反馈&#xff0c;之前写的配置方法没有实现必然ipv6上网&#xff0c;重启路由器后就会导致不能ipv6上网&#xff0c;经过查找文章&#xff0c;找到了 ipv6 nat 上网配置方式&a…

威联通(QNAP)IPV6公网访问教程

威联通&#xff08;QNAP&#xff09;IPV6公网访问教程 威联通路由器IPV6设置一、IPV6获取二、端口设置二、DDNS设置四、成功访问三、注意事项总结&#xff08;必看&#xff09;四、NAS环境靠大家&#xff0c;远离违规使用&#xff08;远离SB&#xff09;。 威联通 大家都懂&am…

Milvus 群星闪耀时|又一个小目标达成 :社区正式突破 15,000 星!

如果把 Milvus 看作开源世界中的一束微光&#xff0c;那用户便是无垠宇宙中点点闪烁的星光。用户每一次点亮 star 之时&#xff0c;Milvus 就会迸发出更加耀眼的光芒。 不知不觉&#xff0c;已有数以万计的 star 为 Milvus 而亮。2022 年 4 月&#xff0c;Milvus 在 GitHub 的…

群星灵能界所有事件_群星战局记录(1)

群星萌新,第一次记录战局。 本局为纯控制台看海局,选的人联,打了UI、LEX和更多巨建的mod,难度上将,800星4堕落3掠夺者。 开局我先占了一块相对封闭的区域,里头有个废弃星门和L星门,开了全科技,然后开始刷巨构。造了原版所有巨构,还有尼科尔戴森光束,超结构装配场,恒…