• 阿里云短信验证


    1.什么是短信验证

    在我们日常生活中经常会遇到短信验证功能,像上网购票或者注册网站账号等场景需要手机验证码,而验证码短信是商家为用户提供用于注册、信息变更等的安全凭证,通过手机验证码短信的内容来帮助用户安全使用账号。短信验证码应用到的场景:安全登录、用户注册、忘记密码、信息变更、活动确认、登录异常等。

    2.开通服务

    搜索阿里云官网 https://www.aliyun.com/ ,登录进去之后选择产品,搜索短信服务并开通此服务

    2.1 添加签名

    按照要求,输入合法信息并提交

    2.2 添加模板

    按照要求,输入合法模板信息并提交

     最后等待审核成功之后就可以使用阿里云短信验证功能了

    3.代码实现

    3.1 导入依赖

    使用阿里云短信验证需要导入以下两个依赖

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.26</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.5.1</version>
            </dependency>

    3.2 编写代码

    这里我将随机生成一个六位数的字符串抽离成了一个工具类CodeUtil

    public class CodeUtil {
    
    
        public static String getCode() {
            String content = "qwertyuiopasdfghjklzxcvbnm1234567890ZXCVBNMQWERTYUIOPASDFGHJKL";
            Random random = new Random();
            String result = "";
            for (int i = 0; i < 6; i++) {
                int index = random.nextInt(content.length());
                char c = content.charAt(index);
                result += c;
            }
            return result;
        }
    
    }

    然后创建MsmController,提供发送验证码的接口

    @RestController
    @RequestMapping("edumsm/msm")
    @CrossOrigin
    public class MsmController {
    
        @Autowired
        private MsmService msmService;
    
        @Autowired
        private RedisTemplate<String, String> template;
    
        @GetMapping("send/{phone}")
        public R sendMsmCode(@PathVariable String phone) {
            String code = template.opsForValue().get(phone);
            if (!StringUtils.isEmpty(code)) {
                return R.ok().data("msg","请五分钟后再试");
            }
            code = CodeUtil.getCode();
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("code", code);
            boolean isSend = msmService.sendCode(map, phone);
            if (isSend) {
                template.boundValueOps(phone).set(code, 5, TimeUnit.MINUTES);
            }
            return R.ok();
        }
    
    }

    创建MsmService,实现发送短信验证码

    @Service
    public class MsmServiceImpl implements MsmService {
    
        public boolean sendCode(Map<String, Object> map, String phone) {
    
            if (StringUtils.isEmpty(phone)) {
                return false;
            }
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", 换成自己的KeyID, 换成自己的secret);
            IAcsClient client = new DefaultAcsClient(profile);
            CommonRequest request = new CommonRequest();
            request.setMethod(MethodType.POST);
            request.setDomain("dysmsapi.aliyuncs.com");
            request.setVersion("2017-05-25");
            request.setAction("SendSms");
            request.putQueryParameter("RegionId", "cn-hangzhou");
            // 发给谁  ----
            request.putQueryParameter("PhoneNumbers", phone);
            // 签名名称
            request.putQueryParameter("SignName", 换成自己的);
            // 模板名称
            request.putQueryParameter("TemplateCode", 换成自己的);
            // 验证码 ----
            //request.putQueryParameter("TemplateParam", "{"code":"" + map.get("code") + ""}");
            request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map).toString());
            try {
                CommonResponse response = client.getCommonResponse(request);
                boolean success = response.getHttpResponse().isSuccess();
                return success;
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
            return false;
        }
    }

    当我们访问controller接口的时候携带手机号就可以发送短信验证码了。

    一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

  • 相关阅读:
    no-octal-escape (Rules) – Eslint 中文开发手册
    Object.isSealed (Object) – JavaScript 中文开发手册
    AngularJS SQL
    Eclipse 内容辅助
    ionic 单选框操作
    CSS border-top-color 属性
    Java 集合:(二十八) SortedMap 接口
    Java 集合:(二十七)Properties实现类
    Java 集合:(二十六) Hashtable 实现类
    Java 集合:(二十五)备用2
  • 原文地址:https://www.cnblogs.com/fqh2020/p/14771091.html
Copyright © 2020-2023  润新知