`
qingyu11068
  • 浏览: 67755 次
文章分类
社区版块
存档分类
最新评论

整合阿里云短信服务 SpringBoot

 
阅读更多
  • 准备工作
    • 开通短信服务(可参考博主的“手机短信验证码”)
    • 如果开通不成功,就只能借下别人已经开通好的短信,如果不想重复,可在其下创建一个新的模板管理
    • 这里只是介绍如何使用
  • 导入依赖
<!--aliyun-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.1</version>  
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version> 
</dependency>

发送验证码到手机上,验证码生成工具类(内容较为固定,也可根据需求改)

package com.xsha.msmservice.utils;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

/**
 * 说明:短信配置
 * 作者:FH Admin
 * from:fhadmin.cn
 */
public class RandomUtil {

	private static final Random random = new Random();

	private static final DecimalFormat fourdf = new DecimalFormat("0000");

	private static final DecimalFormat sixdf = new DecimalFormat("000000");

	public static String getFourBitRandom() {
		return fourdf.format(random.nextInt(10000));
	}

	public static String getSixBitRandom() {
		return sixdf.format(random.nextInt(1000000));
	}

	/**
	 * 给定数组,抽取n个数据
	 * @param list
	 * @param n
	 * @return
	 */
	public static ArrayList getRandom(List list, int n) {

		Random random = new Random();

		HashMap<Object, Object> hashMap = new HashMap<Object, Object>();

		// 生成随机数字并存入HashMap
		for (int i = 0; i < list.size(); i++) {

			int number = random.nextInt(100) + 1;

			hashMap.put(number, i);
		}

		// 从HashMap导入数组
		Object[] robjs = hashMap.values().toArray();

		ArrayList r = new ArrayList();

		// 遍历数组并打印数据
		for (int i = 0; i < n; i++) {
			r.add(list.get((int) robjs[i]));
			System.out.print(list.get((int) robjs[i]) + "\t");
		}
		System.out.print("\n");
		return r;
	}
}

发送验证码,验证码是有有效时间的(时间可以自己设置)

这里可以创建常量类读取配置文件的阿里云密钥等信息(可参考博主的“对象存储”)

package com.xsha.msmservice.service.impl;

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.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.xsha.msmservice.service.MsmService;
import com.xsha.msmservice.utils.RandomUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 说明:短信配置
 * 作者:FH Admin
 * from:fhadmin.cn
 */
@Service
public class MsmServiceImpl implements MsmService {

    // 注入redis缓存对象
    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Override
    public boolean sendMessage(String phone) {
        if(StringUtils.isEmpty(phone)) return false;
        // 先获取手机号对应的验证码(该验证码没过期)
        String code = redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)) {
            return true;
        }
        // 过期则生成随机验证码,并在发送之后向redis中存入手机号对应的验证码
        code = RandomUtil.getFourBitRandom();
        Map<String, Object> map = new HashMap<>();
        map.put("code", code);

        // 设置短信配置
        DefaultProfile profile = DefaultProfile.getProfile("your region", "your accessId", "your accessSecret");

        IAcsClient client = new DefaultAcsClient(profile);

        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(phone);//接收短信的手机号码
        request.setSignName("your signature name");//短信签名名称
        request.setTemplateCode("your template");//短信模板CODE
        request.setTemplateParam(JSONObject.toJSONString(map));//短信模板变量对应的实际值

        try {
            SendSmsResponse response = client.getAcsResponse(request);
            // 发送短信,尽量打印出来是否发送成功
            new Gson().toJson(response);
            // 将验证码放置在redis缓存中,并设置5分钟有效时间,最后一个参数是单位
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
        } catch (ServerException e) {
            e.printStackTrace();
            return false;
        } catch (ClientException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

 

0
1
分享到:
评论

相关推荐

    SpringBoot Maven(已配置阿里云镜像)

    SpringBoot Maven(已配置阿里云镜像)是一个针对SpringBoot项目的优化版本的Maven软件包,它预先配置了阿里云的Maven镜像源。这个版本的Maven旨在解决开发人员在使用SpringBoot时遇到的Maven下载速度慢的问题,通过...

    springboot整合阿里云发送短信demo

    通过以上步骤,你可以将Spring Boot应用与阿里云短信服务成功整合,实现在后端程序中便捷地发送短信。这个过程涵盖了Spring Boot的集成、阿里云服务的使用以及Java编程技巧,对提升后端开发能力大有裨益。

    SpringBoot整合阿里云OSS对象存储服务的实现

    "SpringBoot整合阿里云OSS对象存储服务的实现" 本文主要介绍了如何使用SpringBoot框架整合阿里云OSS对象存储服务,实现文件上传和存储功能。文章通过示例代码详细介绍了整合过程,对读者学习和工作具有参考价值。 ...

    Springboot阿里、腾讯短信和邮件发送service封装

    对于阿里云短信服务,我们需要添加`alibaba-cloud-sdk`的`sms`模块;对于腾讯云短信服务,需要添加`tencent-cloud-sdk`的相应依赖;邮件服务通常使用JavaMailSender接口,因此需要添加`spring-boot-starter-mail`...

    springboot整合阿里云oss进行文件上传

    阿里云OSS是一种云存储服务,它提供了高可用、高可靠的存储解决方案,适合各种业务场景下的文件存储。Spring Boot作为轻量级的Java开发框架,能够快速构建高效的应用程序。接下来,我们将分步骤讲解如何配置和使用这...

    springboot整合oss实现文件的上传,查看,删除,下载

    OSS通常是指云存储服务,如阿里云的OSS,它提供了大规模、安全且高可用的在线存储解决方案。SpringBoot作为一个轻量级的Java框架,使得开发变得更加简洁高效。 一、SpringBoot简介 SpringBoot是Spring Framework的...

    阿里云OCR识别SDK示例

    阿里云OCR识别SDK示例是针对开发者提供的一个强大的工具包,它支持多种编程语言,包括C#、C++、Node....通过深入学习和实践这些SDK,开发者可以灵活地在各种应用场景中部署阿里云OCR服务,提升业务的自动化程度和效率。

    基于springboot+vue+阿里云的短信服务实现的短信群发系统源代码+数据库

    这是一个基于Spring Boot、Vue.js和阿里云短信服务的短信群发系统的源代码项目。这个系统的核心功能是利用阿里云的API实现短信的批量发送,它整合了前后端开发技术,为用户提供了便捷的短信发送解决方案。 1. **...

    springboot 整合

    在控制器层,我们需要创建一个方法接收文件参数,然后将这些文件保存到服务器的指定位置或者存储到云存储服务如阿里云OSS、腾讯COS等。同时,为了防止恶意文件上传,我们需要进行文件类型的检查和大小限制。 其次,...

    SpringBoot2.7整合SpringSecurity+Jwt+Redis+MySQL+MyBatis完整项目代码

    在本项目中,我们主要关注的是SpringBoot 2.7版本与多个技术的深度整合,包括Spring Security、JWT(JSON Web Token)、Redis缓存以及MySQL数据库,并利用MyBatis作为持久层框架。以下是对这些技术及其整合应用的...

    浅谈Springboot整合RocketMQ使用心得

    `ONSADDR`变量用于设置阿里云RocketMQ的服务地址,根据实际环境选择对应的URL。如果消息发送量较大,建议为不同的业务创建独立的Topic,以避免性能瓶颈。 在生产者配置方面,我们可以有两种方式。第一种是通过配置...

    springboot 集成kettle核心包依赖文件配置信息pom.xml

    springboot 集成kettle核心包依赖文件配置信息pom.xml

    阿里云java短信验证码源码-springboot-learning-3:springboot框架相关技术的案例项目及使用springboot

    阿里云java短信验证码源码 springboot-learning-3 springboot框架相关技术的案例项目及使用springboot框架时的需注意点(接着springboot-learning-2仓库) 项目介绍 SpringBoot整合框架各种实用的组件技术点以及一些...

    SpringBoot整合EasyExcel进行报表导入导出实例Demo

    SpringBoot作为一款轻量级的Java开发框架,简化了项目的配置与搭建,而EasyExcel则是阿里巴巴推出的一个处理Excel的开源库,特别适合大数据量的读写操作,避免了内存溢出的问题。本实例将详细介绍如何在SpringBoot...

    springboot(4) 整合mybatis和hibernate

    可以改为国内的阿里云Maven仓库,修改`settings.xml`文件: ```xml &lt;id&gt;aliyun * &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt; ``` 完成以上步骤后,我们的Spring Boot项目就能同时...

    自定义springboot-starter项目源码【cwp-spring-boot-starter】

    SpringBoot Starter是SpringBoot框架的核心特性之一,它允许开发者快速集成和配置各种功能模块,极大地简化了项目的构建过程。在自定义的`cwp-spring-boot-starter`项目中,我们可以深入理解SpringBoot Starter的...

    Springboot开发的多类型文件存储服务(源码)

    本项目是基于Spring Boot开发的多类型文件存储服务,它提供了对多种文件存储服务的支持,包括本地存储、阿里云OSS(Object Storage Service)、Minio以及fastDFS。 首先,我们来看本地文件系统(Local)存储。这是...

    springboot整合easypoi实现文件导入导出OSS文件上传和下载。OSS图片导出

    在本项目中,我们主要探讨如何使用SpringBoot框架与阿里云OSS(Object Storage Service)服务相结合,通过Easypoi库实现文件的导入、导出功能,以及OSS上的文件上传和下载。Easypoi是一个强大的Java操作Excel的工具...

    基于springboot+oauth2.0+jwtToken鉴权认证开发的后台接口,整套架构采用restful风格,车牌识别,阿里云消息推送,短信接口等

    内容只为接口开发,配合前端和移动app调用使用,不包含html页面,基于springboot+oauth2.0+jwttoken鉴权(内有怎么使用redistoken和数据库token注释)+restful风格+阿里短信+阿里消息推送+车牌识别等。该项目为工作...

Global site tag (gtag.js) - Google Analytics