精华内容
下载资源
问答
  • 云短信验证
    2022-06-16 10:35:33

    java实现阿里云短信验证登录

    首先要获取四个服务器参数,如果不能登录阿里云管理对应的服务器,找你的服务器提供者要(你的项目经理,你的老板)
    参数:AccessKeyID,AccessKeySecret,短信签名,模板code

    依赖

    <!--阿里短信服务相关jar包-->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.1.0</version> <!-- 注:如提示报错,先升级基础包版,无法解决可联系技术支持 -->
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
        <version>1.1.0</version>
    </dependency>
    
    package com.ruoyi.web.slweb.controller;
    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.http.FormatType;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.ruoyi.common.core.domain.AjaxResult;
    import com.ruoyi.common.utils.TimeUtils;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @RequestMapping("aliSmsUtil")
    @Api(tags = "验证手机号")
    public class AliSmsUtil {
        // 所有参数,可自定义根据需求,配置成application.properties 用@value()注入
        /**
         * 产品名称: 云通信短信API产品,开发者无需替换
         */
        static final String PRODUCT = "Dysmsapi";
    
        /**
         * 产品域名,开发者无需更换
         */
        static final String DOMAIN = "dysmsapi.aliyuncs.com";
    
        /**
         * 开发者自己的AccessKeyID
         */
        static final String ACCESS_KEYID = "自己的AccessKeyID";
    
        /**
         * 开发者自己的AccessKeySecret
         */
        static final String ACCESSKEY_SECRET = "自己的AccessKeySecret";
    
        /**
         * 短信签名--可在短信控制台中找到
         */
        static final String SIGN = "自己的短信签名";
    
        /**
         * IAcsClient是aliyun-java-sdk-green的Java客户端。使用aliyun-java-sdk-green Java SDK发起请求前,您需要初始化一个IAcsClient实例,并根据需要修改IClientProfile的配置项。
         */
        public IAcsClient acsClient;
    
        @Autowired
        public RedisTemplate redisTemplate;
        /**
         * 模板code
         */
        private static final String templateCode = "自己的模板code";
    
    
        /**
         * 配置超时时间,初始化acsClient
         *
         * @return
         * @throws
         */
        public IAcsClient getInstant() throws ClientException {
            if (acsClient == null) {
                // 配置超时时间
                System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
                System.setProperty("sun.net.client.defaultReadTimeout", "10000");
                //初始化acsClient,暂不支持region化
                IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEYID, ACCESSKEY_SECRET);
                DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
                return acsClient = new DefaultAcsClient(profile);
            }
            return acsClient;
        }
    
        /**
         *  创建短信发送请求
         * @param mobile        手机号
         * @param jsonObject    json数据
         * @param templateCode  短信模板
         * @return
         * @throws ClientException
         */
        public SendSmsResponse getSmsCodeClient(String mobile, JSONObject jsonObject, String templateCode) throws ClientException {
            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //修改数据提交方式
            request.setMethod(MethodType.POST);
            //修改数据交互格式
            request.setAcceptFormat(FormatType.JSON);
            //必填:待发送手机号
            request.setPhoneNumbers(mobile);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName(SIGN);
            //必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(templateCode);
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam(jsonObject.toString());
    
            return getInstant().getAcsResponse(request);
        }
    
        /**
         * 发送短信
         *
         * @param mobile       手机号码
         * @return
         */
        @GetMapping("sendSms")
        @ApiOperation("发送短信")
        public AjaxResult sendSms(@RequestParam("mobile") String mobile) {
            SendSmsResponse smsResponse = null;
            JSONObject jsonObject = new JSONObject();
            //获取一个长度为6的验证码
            Integer randomNumber = getRandomStr(6, 1);
            //将验证码放入缓存,手机号和验证码作为key
            redisTemplate.opsForValue().set(mobile+randomNumber,randomNumber,15, TimeUnit.MINUTES);
            jsonObject.put("code",randomNumber);
            try{
                smsResponse = getSmsCodeClient(mobile,jsonObject,templateCode);
            } catch (ClientException e) {
                e.printStackTrace();
            }
            // 发生业务错误
            if ("isv.BUSINESS_LIMIT_CONTROL".equals(smsResponse.getCode())) {
                String message = smsResponse.getMessage();
                String limitNum = message.substring(message.length() - 1);
                if ("5".equals(limitNum)) {
                    // 此处可自定义业务异常
                    throw new RuntimeException("获取次数已达上线,请过一小时再试");
                } else if (limitNum.equals("0")) {
                    throw new RuntimeException("获取次数已达上线,请明日再试");
                } else if (limitNum.equals("1")) {
                    throw new RuntimeException("获取次数已达上线,请过一分钟再试");
                }
            }
            return AjaxResult.success(smsResponse);
        }
    		
    	/**
         * 获取验证码
         * @param strSize 验证码长度
         * @param size 获取个数
         * @return
         */
        public static Integer getRandomStr(int strSize, int size) {
            List<Character> list = Arrays.asList('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
            int a = 0;
            List<String> resultList = new ArrayList<>();
            StringBuilder str = new StringBuilder();
            int lSize = list.size();
            for (int s = 0; s < size; s++) {
                str.delete(0, strSize);
                for (int j = 0; j < strSize; j++) {
                    a = (int) (Math.random() * lSize);
                    str.append(list.get(a));
                }
                resultList.add(str.toString());
            }
            return Integer.valueOf(resultList.get(0));
        }
    
    
    }
    
    更多相关内容
  • 阿里云短信验证服务,要用到的jar包,这里我整合了关键jar包,都是最新的包,调用API或用群发助手,即可发送验证码、通知类和营销短信
  • python web项目中 用户注册登录行为,需要用到验证,这里记录一下短信验证的实现步骤

    1. 注册腾讯云&开通云短信

    1.1 注册并认证

    注册一个腾讯云账户,腾讯云中提供了很多功能:云服务器、云储存器、云直播、云短信等很多功能。

    注册地址:https://cloud.tencent.com/
    根据提示一步步进行注册即可,
    实名注册时,什么行业、通讯等信息,按照自己的的实际情况填写即可,实在不知道的可以随便填。

    1.2 开通云短信

    腾讯云注册成功之后,登录腾讯云并去开通 云短信服务,开通短信服务后才能发短信。

    开通地址:https://console.cloud.tencent.com/smsv2

    根据流程进行开通之后,就可以进入云短信控制台。

    2. 创建应用

    创建应用并将应用中生成的 SDK AppIDApp Key 复制下来,之后通过python发送短信时需要用到。
    在这里插入图片描述

    3. 创建签名

    在腾讯云短信签名时需要认证,认证需要填写签名类型:网站、APP、小程序、公众号,前三种需要提供企业资质等复杂的东西,个人公众号认证会比较便捷,所以推荐个人开发的话使用 公众号 进行签名。

    so,咱们需要先 申请一个公众号 然后 创建签名 。

    3.1 申请微信订阅号

    注册地址:https://mp.weixin.qq.com/
    在这里插入图片描述

    3.2 创建签名

    根据自己的需求选择 国内短信/国际短信 中的签名管理,进行创建签名。

    切记:签名类型选择 公众号 ,并根据提示上传相关数据即可。

    签名创建并审核通过后,把你提交的 签名内容 值保存下来,之后Python发送短信用。

    提醒:签名创建完成之后,需要等待腾讯进行审核,也可以联系他们客服QQ加速审核

    4. 创建模板

    根据自己需求创建短信模板,以后根据模板进行发送短信,例如:您的注册验证码:{1},如非本人操作,请忽略本短信!

    模板创建并审核通过之后,把 模板ID 保存下来,之后Python发送短信用

    5. 发送短信

    上述的准备工作做完中我们开通相关服务并获取到如下几个值:

    • 创建应用,获取到 appid 和 appkey
    • 创建签名,获取 签名内容
    • 创建模板,获取 模板ID

    接下来开始使用Python发送短信。

    第一步:安装SDK

    pip install qcloudsms_py
    

    第二步:基于SDK发送短信

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import ssl
    # ssl._create_default_https_context = ssl._create_unverified_context
    from qcloudsms_py import SmsMultiSender, SmsSingleSender
    from qcloudsms_py.httpclient import HTTPError
    def send_sms_single(phone_num, template_id, template_param_list):
        """
        单条发送短信
        :param phone_num: 手机号
        :param template_id: 腾讯云短信模板ID
        :param template_param_list: 短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
        :return:
        """
        appid = 自己应用ID	# 自己应用ID
        appkey = "自己应用Key"  # 自己应用Key
        sms_sign = "公众号全称"  # 自己腾讯云创建签名时填写的签名内容(使用公众号的话这个值一般是公众号全称或简称)
        sender = SmsSingleSender(appid, appkey)
        try:
            response = sender.send_with_param(86, phone_num, template_id, template_param_list, sign=sms_sign)
        except HTTPError as e:
            response = {'result': 1000, 'errmsg': "网络异常发送失败"}
        return response
    def send_sms_multi(phone_num_list, template_id, param_list):
        """
        批量发送短信
        :param phone_num_list:手机号列表
        :param template_id:腾讯云短信模板ID
        :param param_list:短信模板所需参数列表,例如:【验证码:{1},描述:{2}】,则传递参数 [888,666]按顺序去格式化模板
        :return:
        """
        appid = 自己应用ID
        appkey = "自己应用Key"
        sms_sign = "公众号全称"
        sender = SmsMultiSender(appid, appkey)
        try:
            response = sender.send_with_param(86, phone_num_list, template_id, param_list, sign=sms_sign)
        except HTTPError as e:
            response = {'result': 1000, 'errmsg': "网络异常发送失败"}
        return response
    

    6. 关于频率限制

    腾讯云短信后台可以进行 短信频率 的限制。

    但是,由于我们是免费用户所以无法进行设置,只能使用默认的配置(30秒发1条/1小时发5条/1天发10条)

    展开全文
  • java阿里云短信验证,下载可直接使用(附jar)。。。。。
  • springboot整合阿里云短信验证功能

    一.开通阿里云短信服务

    开通步骤如下图所示 

     开通完成后,进入阿里云短信验证首页,点击国内消息

     一般来说,在短信验证时需要签名管理和模板管理,但是签名管理需要备案或者上线服务,所以对于没有备案和上线应用的用户来说,就进行不了这一项,但是阿里云提供了免费的api测试短信验证服务(当然测试信息验证码也是收费的),具体过程如下:

    这边点击api发送测试功能,进行我们的测试验证,此时会让绑定手机号,我们剋以绑定自己的手机号即可。

     我自己测试绑定了两个,随便搞一个就行

    绑定后点击调用api发短信

     然后会自动生成签名名称和模板code,这个我们需要记住,后续代码中需要这两个参数。

    ​​​​​​​

     主要参数就这几个,后面代码中使用的也就是这几个参数。阿里云短信服务开通后,进行代码分析。

    二. 代码分析

    首先我们需要用到

    1.redis:在进行登陆注册的时候进行短信验证时,我们可以将相关的信息存到redis中,这样避免了从数据库查找,直接从缓存中查找更加方便。

    2.swagger:用来进行接口测试

    (0)首先创建一个spring initializr项目,具体的项目结构如下所示。

    (1)相关的pom依赖如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.7.0</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>mozz</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mozz</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--swagger-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.7.0</version>
            </dependency>
            <!--swagger ui-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.7.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-redis</artifactId>
                <version>1.4.0.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.2.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>2.0.10</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    (2)相关配置文件application.properties

    # 端口号
    server.port=8888
    
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.database= 0
    spring.redis.timeout=1800000
    
    spring.redis.lettuce.pool.max-active=20
    spring.redis.lettuce.pool.max-wait=-1
    spring.redis.lettuce.pool.max-idle=5
    spring.redis.lettuce.pool.min-idle=0
    
    #返回json的全局时间格式
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone=GMT+8
    
    spring.mvc.pathmatch.matching-strategy=ant_path_matcher
    

    (3)相关工具类

    (3.1)统一返回值

    package com.example.mozz.utils;
    
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    import java.util.HashMap;
    import java.util.Map;
    
    //统一返回结果的类
    @Data
    public class R {
    
        @ApiModelProperty(value = "是否成功")
        private boolean success;
    
        @ApiModelProperty(value = "返回码")
        private Integer code;
    
        @ApiModelProperty(value = "返回消息")
        private String message;
    
        @ApiModelProperty(value = "返回数据")
        private Map<String,Object> data = new HashMap<String,Object>();
    
        //构造方法私有
        private R(){};
    
        //成功的静态方法
        public static R ok(){
            R r = new R();
            r.setSuccess(true);
            r.setCode(ResultCode.SUCCESS);
            r.setMessage("成功");
            return r;
        }
    
        //失败的静态方法
        public static R error(){
            R r = new R();
            r.setSuccess(false);
            r.setCode(ResultCode.ERROR);
            r.setMessage("失败");
            return r;
        }
    
        public R success(Boolean success){
            this.setSuccess(success);
            return this;
        }
    
        public R code(Integer code){
            this.setCode(code);
            return this;
        }
    
        public R message(String message){
            this.setMessage(message);
            return this;
        }
    
        public R data(String s, Object o){
            this.data.put(s,o);
            return this;
        }
    
        public R data(Map<String,Object> map){
            this.setData(map);
            return this;
        }
    }
    
    package com.example.mozz.utils;
    
    public interface ResultCode {
    
        public static Integer SUCCESS = 20000;
        public static Integer ERROR = 20001;
    
    }
    

     (3.2)验证码分为四位和六位,所以写一个工具类返回四位还是六位验证码RandomUtils

    package com.example.mozz.utils;
    
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Random;
    
    /**
     * @author mozz
     * @version 1.0
     * @date 2022/8/22
     */
    public class RandomUtils {
    
        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;
        }
    
    }
    

    (3.3) swagger配置类SwaggerConfig

    package com.example.mozz.utils;
    
    import com.google.common.base.Predicates;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket webApiConfig(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("webApi")
                    .apiInfo(webApiInfo())
                    .select()
                    .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                    .paths(Predicates.not(PathSelectors.regex("/error.*")))
                    .build();
    
        }
        private ApiInfo webApiInfo(){
             return new ApiInfoBuilder()
             .title("API文档")
             .description("接口定义")
             .version("1.0")
             .contact(new Contact("mozz", "http://www.baidu.com",
                    "1345656307@qq.com"))
             .build();
             }
    }
    
    

    至此整个工具类都创建完成

    (2)编写service层

    (2.1)MessageService接口

    package com.example.mozz.service;
    
    import java.util.Map;
    
    public interface MessageService {
    
    //是否发送成功
        boolean send(Map<String, Object> map, String phone);
    }
    

    (2.2)实现类

    package com.example.mozz.service.Impl;
    
    import com.alibaba.fastjson.JSONObject;
    import com.aliyuncs.CommonRequest;
    import com.aliyuncs.CommonResponse;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.utils.StringUtils;
    import com.example.mozz.service.MessageService;
    import org.springframework.stereotype.Service;
    
    import java.util.Map;
    
    @Service
    public class MessageServiceImpl implements MessageService {
    
        @Override
        public boolean send(Map<String,Object> map, String phone) {
             if(StringUtils.isEmpty(phone)) return false;
    
             DefaultProfile profile =
                     DefaultProfile.getProfile("default", "LTAI5tArv8Ccgp2YWX7ejmJa",
                    "5CvuGiss2sLMi5vcmI7N0UT7OjqWFC");
             IAcsClient client = new DefaultAcsClient(profile);
    
             CommonRequest request = new CommonRequest();
             //request.setProtocol(ProtocolType.HTTPS);
             request.setMethod(MethodType.POST);
             request.setDomain("dysmsapi.aliyuncs.com");
             request.setVersion("2017-05-25");
             request.setAction("SendSms");
    
             request.putQueryParameter("PhoneNumbers", phone);   //手机号
             request.putQueryParameter("SignName", "阿里云短信测试");    //签名名称
             request.putQueryParameter("TemplateCode", "SMS_151923909");  //模板名称
             request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));  //验证码转换json数据
    
             try {
                 CommonResponse response = client.getCommonResponse(request);
                 System.out.println(response.getData());
                 return response.getHttpResponse().isSuccess();
                 } catch (ServerException e) {
                 e.printStackTrace();
                 } catch (ClientException e) {
                 e.printStackTrace();
                 }
             return false;
             }
    }
    

    这边有几个注意事项:

    如何获取你的accessKeyId和secret,步骤如下:

    点击继续使用AccessKey, 出现对应的AccessKeyId以及secret信息

    查看secret时,需要手机验证码,验证一下即可。(获取到id和secret后,最好将其保存在本地,这样以后再用的话可以直接使用,不需要这样去查找了) 

     (3)controller层编写

    package com.example.mozz.controller;
    
    import com.example.mozz.service.MessageService;
    import com.example.mozz.utils.R;
    import com.example.mozz.utils.RandomUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import com.aliyuncs.utils.StringUtils;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.TimeUnit;
    
    @RestController
    @RequestMapping("/user/message")
    public class MessageController {
    
        @Autowired
        private MessageService messageService;
    
        @Autowired
        private RedisTemplate<String,String> redisTemplate;
    
    
        @GetMapping("{phone}")
        public R sendMessage(@PathVariable String phone){
    
            //1.从redis中获取验证码,如果缓存中有的话直接返回,没有的话从阿里云发送获取
           String code = redisTemplate.opsForValue().get(phone);
    
           if(!StringUtils.isEmpty(code)){
                return R.ok();
           }
    
           //从阿里云发送
            // 1.生成随机值,发送给阿里云
            code = RandomUtils.getSixBitRandom();   //六位验证码
            Map<String,Object> map = new HashMap<>();
            map.put("code",code);
    
            boolean isSend = messageService.send(map,phone);
    
            if(isSend){
                redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
                return R.ok();
            }else{
                return R.error().message("发送失败");
            }
        }
    
    }
    

    至此整个的代码就编写完成,随后进行swagger测试

    启动类:需要注意注解需要加上exclude = {DataSourceAutoConfiguration.class}, 因为我们没有用到数据库相关信息,所以需要将数据源排除掉。

    package com.example.mozz;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    public class MozzApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MozzApplication.class, args);
        }
    
    }
    

     

     发送成功,这是你的手机上应该会收到相应的验证码:

     可以看到这是六位验证码,也可以改成四位验证码,在controller层里面调用getFourBitRandom方法,即发送四位验证码。

     至此短信验证功能结束,后续实现完整的q前后端登陆注册短信验证功能

    展开全文
  • 阿里云短信验证demo-PHP
  • 阿里云短信验证

    2018-04-20 13:17:39
    现成的代码工具,无需配置,只需要对应的key和value值就可以实现短信验证功能
  • 大家看看这个 短信验证服务 的内容 小细节 虽然没啥用..... 发没发现, 短信验证码最高的上线, 是20位 可以是数字字母混合, 不能有任何特殊符号 只能存在 (大小写英文字母和数字) 并且是20位 怎么样 有没有...

    目录

     大家看看这个 短信验证服务 的内容 小细节 虽然没啥用.....

    怎么样 有没有茅塞顿开的感觉  ,  有的话点个赞吧...


     大家看看这个 短信验证服务 的内容 小细节 虽然没啥用.....

     发没发现, 短信验证码最高的上线,  是20位   可以是数字字母混合, 不能有任何特殊符号 

    只能存在  (大小写英文字母和数字) 并且是20位

    怎么样 有没有茅塞顿开的感觉  ,  有的话点个赞吧...

    展开全文
  • 今天介绍一下阿里短信验证码验证,以注册账户为例,下面就是实际图展示了,今天测试收到的短信,特别有意思,说实话,第一次做,也是大费周章,可是做完以后却又觉得很简单,但是,对于新手来说,弯路是要走很多...
  • 阿里云短信验证服务

    千次阅读 2019-08-27 18:35:40
    阿里云短信验证是一个安全可靠易使用的第三方API,很多人在做项目时都会选择使用阿里云短信验证来做验证码模块的功能,今天我们就来学习如何使用阿里云短信验证。 登录阿里云官网添加短信验证服务 登录阿里...
  • java阿里云短信验证怎么写,这篇文章足够了
  • java实现阿里云短信验证注册–详细教程 .项目中先引入依赖 <!--阿里云短信包--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId...
  • 阿里 短信验证发送

    2018-05-04 14:23:38
    短信服务...................................................................................................................................................................................................
  • 搜索阿里,打开官网 点击右上角的注册,或者登录,支付宝就可以进行注册。 在导航栏找到产品->短信服务。 点击免费开通 如果里面没有钱的话,我们需要先进行充值。 这里我们充值个1块钱就够测试...
  • 阿里云短信验证码开发所需jar包。。。。。。。。。。。
  • PHP阿里获取短信验证方法 1需要先开通阿里的短信服务 2需要先申请短信签名(具体申请详情请参考说明,申请签名的适用场景请根据实际需求) 3在模板管理中需添加模板(具体模板内容,请根据实际需求申请) 申请...
  • 阿里云短信验证(代码)demo完整教程

    万次阅读 多人点赞 2018-09-09 20:10:42
    使用阿里云短信服务的前提你得有阿里云账号(我简直在说废话)没有得话就去注册一个 注册后登陆 教程开始: 阿里云上面有官方得文档以及Demo&amp;SDK,为什么我还要写这篇播客呢,因为上面的文档说的太过于...
  • Django实现阿里云短信验证第一步 创建SMS.pyVIews函数中 第一步 创建SMS.py 点击此处创建AccessKey和Access Key Secret 获取签名名称和模板code 将得到的签名名称和模板code复制到这里 代码如下: from ...
  • 这个文件只需要改动那个apikey就可以了,然后在梦网官网下载demo的,导入里面的jar,将jar包和这个文件一并放入项目中就可以调用了,SSM,SpringBoot都可以用~~~
  • 在去年我记得有些过一篇关于短信验证的博文但是只是简单的实现,并未以接口的方式去传入,今天在写一个有关于短信验证的记录一下 阿里 当然在这里也有相关教学,新手可以先去看看,话不多说,直接上过程 依赖引入...
  • 准备工作 登入华为云控制台,找到“消息&短信”模块,找到国内短信(本次开发只针对国内用户),下面分别有 应用管理–签名管理–模板管理 三块 ...找到华为云短信开发指南里的Java代码样例 》》》短信开发样
  • 我这里选择了腾讯的,大家可以选其他公司的,都大同小异。那下面直接开始!新账号注册可以免费领取短信包一百条,设置成功后好像还会送一百条!如下图: 点击直接注册,我们会直接到如下界面! 我们直接点击...
  • 4.阿里云短信验证

    2020-11-03 17:18:06
    阿里云短信验证 1 导入pom依赖 <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.1.0</version> </...
  • 阿里-RAM用户登录 创建AccessKey,获取AccessKey和AccessKeySecret 找到短信服务,获取签名 获取短信模板code 5.查看模板内容中的变量 如图变量则为code 一、导入jar包 <!-- 短信验证码 --> <...
  • 腾讯云短信接口jar包

    2018-10-17 17:17:44
    使用腾讯云短信服务是,java开发所需要的jar包。。。。
  • 短信发送阿里接口(包含下载目录): https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.675.f2e831440ERrsJ 用户AccessKey 设置连接 https://usercenter.console.aliyun.com/#/manage/ak...
  • 阿里云短信验证服务 1. 注册一个阿里云的帐号 2. 在搜索栏搜索短信服务 3. 点击免费开通 4.开通之后点击管理控制台 5. 获取AccessKey 6. 创建AccessKey并保存,后面会用到 7...
  • Java阿里云短信验证,短信通知接口 按照阿里云接口,代码不唯一,但性质都一样 如下 package com.maptest.util; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import ...
  • 阿里云短信验证解决方案(java版)(redis存储)
  • java实现短信验证功能(腾讯

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,817
精华内容 5,926
关键字:

云短信验证

友情链接: LCD_LTS350Q1_PE1.rar