首先得在阿里云根据流程开通短信服务,申请签名和模版,具体看文档

因为这是个web项目,用到了thymeleaf模板,所以在pom.xml中加入如下依赖

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-core</artifactId>
  4. <version>4.4.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  9. <version>1.1.0</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>

verifyCodeGenerator.java是生成验证码的工具类

  1. public class verifyCodeGenerator {
  2. // 生成验证码
  3. public static String getVerifyCode()
  4. {
  5. Random random=new Random();
  6. StringBuffer stringBuffer=new StringBuffer();
  7. for (int i=0;i<6;i++)
  8. {
  9. stringBuffer.append(String.valueOf(random.nextInt(10)));
  10. }
  11. System.out.println(stringBuffer.toString());
  12. return stringBuffer.toString();
  13. }
  14. }

MsUtil .java是发送验证码的工具类

  1. public class MsUtil {
  2. // 发送验证码及返回验证码字符串
  3. public static String send(String mobile)
  4. {
  5. //设置超时时间-可自行调整
  6. System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
  7. System.setProperty("sun.net.client.defaultReadTimeout", "10000");
  8. //初始化ascClient需要的几个参数
  9. final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
  10. final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
  11. //替换成你的AK
  12. final String accessKeyId = "yourAccessKeyId";//你的accessKeyId,参考本文档步骤2
  13. final String accessKeySecret = "yourAccessKeySecret";//你的accessKeySecret,参考本文档步骤2
  14. //初始化ascClient,暂时不支持多region(请勿修改)
  15. IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
  16. accessKeySecret);
  17. try {
  18. DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
  19. } catch (ClientException e) {
  20. e.printStackTrace();
  21. }
  22. IAcsClient acsClient = new DefaultAcsClient(profile);
  23. //组装请求对象
  24. SendSmsRequest request = new SendSmsRequest();
  25. //使用post提交
  26. // request.setMethod(MethodType.POST);//过期了
  27. request.setSysMethod(MethodType.POST);
  28. //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
  29. request.setPhoneNumbers(mobile);
  30. //必填:短信签名-可在短信控制台中找到
  31. request.setSignName("小生不才");
  32. //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
  33. request.setTemplateCode("SMS_162732775");
  34. //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
  35. //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
  36. String verifyCode=verifyCodeGenerator.getVerifyCode();
  37. request.setTemplateParam("{\"code\":" + verifyCode + "}");
  38. //可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
  39. //request.setSmsUpExtendCode("90997");
  40. //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
  41. request.setOutId("yourOutId");
  42. //请求失败这里会抛ClientException异常
  43. try {
  44. SendSmsResponse acsResponse = acsClient.getAcsResponse(request);
  45. } catch (ClientException e) {
  46. e.printStackTrace();
  47. }
  48. // if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
  49. // return verifyCode;
  50. ////请求成功
  51. // }
  52. return verifyCode;
  53. }
  54. }

application.properties的配置

  1. #关闭thymeleaf缓存
  2. spring.thymeleaf.cache=false
  3. #ָ端口
  4. server.port=8888
  5. #模板的路径
  6. spring.freemarker.template-loader-path=classpath:/templates
  7. #设置模板的字符编码
  8. spring.freemarker.charset=utf-8

thymeleaf模板页面

sign_in.html 是发送和输入验证码页面
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <form action="matchCode" method="post">
  10. <!--<input type="text" placeholder="请输入手机号码"/>-->
  11. <input type="text" placeholder="请输入验证码" name="yourCode">
  12. <input type="submit" value="确定">
  13. </form>
  14. <div th:text="${code}"></div>
  15. </body>
  16. </html>
test.html 是验证结果页面
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <div th:text="${result}"></div>
  10. </body>
  11. </html>

UserController .java

  1. @Controller
  2. public class UserController {
  3. @Autowired
  4. private HttpServletRequest request; //自动注入request
  5. @GetMapping(value = "/")
  6. public String sign(Model model)
  7. {
  8. String code= MsUtil.send("你接收验证码的手机号");
  9. // String verifyCode = verifyCodeGenerator.getVerifyCode();
  10. model.addAttribute("code","验证码是"+code);
  11. request.getSession().setAttribute("code",code);
  12. // attr.addFlashAttribute("code",code);
  13. return "sign_in.html";
  14. }
  15. //匹配输入的验证码和发送的验证码是否一致
  16. @PostMapping(value = "matchCode")
  17. public String matchCode(@RequestParam String yourCode,Model model) {
  18. String code =(String) request.getSession().getAttribute("code");
  19. System.out.println("code===="+code);
  20. if (yourCode.equals(code)){
  21. System.out.println("成功");
  22. model.addAttribute("result","成功");
  23. }else {
  24. System.out.println("失败");
  25. model.addAttribute("result","失败");
  26. }
  27. return "test";
  28. }
  29. }

运行结果



参考文档

个人网站

Jave Web阿里云短信服务发送验证码的更多相关文章

  1. springboot 使用阿里云短信服务发送验证码

    一.申请阿里云短信服务 1.申请签名 2.申请模板 3.创建accesskey(鼠标悬停在右上角头像) 二.代码实现 1.springboot引入maven依赖 <dependency> ...

  2. java实现阿里云短信服务发送验证码

    由于做项目的时候遇到了接第三方短信服务,所以记录一下. 一.新建一个maven项目并导入相关依赖 <!--手机发送短信验证码--> <dependency> <group ...

  3. 阿里云短信服务发送短信验证码(JAVA开发此功能)

    开发此功能需注册阿里云账号,并开通短信服务(免费开通) 充值后,不会影响业务的正常使用!(因为发送验证类短信:1-10万范围的短信是0.045元/条).开发测试使用,充2块钱测试足够了 可参考阿里云官 ...

  4. springboot 项目使用阿里云短信服务发送手机验证码

    1.注册阿里云账户进行账号实名认证 2.申请短信签名和模板 3.创建access_key和access_secret 4.然后就是代码编写 一.找到产品与服务里面的云通信模块,然后找到短信服务,开通短 ...

  5. php 阿里云短信服务及阿里大鱼实现短信验证码的发送

    一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...

  6. flask+阿里云短信服务实现注册发送手机验证码

    效果图: 该效果主要讲解实现通过调用阿里云的SDK实现发送注册验证码短信(阿里云短信付费使用) 购买阿里云短信服务 购买链接:https://www.aliyun.com/product/sms 1. ...

  7. 移动端获取短信验证码java实现——阿里云短信服务

    需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...

  8. 浏览器端获取短信验证码java实现——阿里云短信服务

    需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...

  9. Zabbix 3.4.3 使用阿里云短信服务进行报警

    目录 一.阿里云短信服务 1.1.首先开通阿里云短信服务 1.2 创建签名 1.3 创建短信模板 1.4 创建发送脚本 二.Zabbix Web 配置 2.1 增加 Media types 2.2 给 ...

随机推荐

  1. 转(C# 类似右键菜单弹出窗体)

    文章来自 https://www.cnblogs.com/ahdung/p/FloatLayerBase.html 每天进步一点点 新建类  FloatLayerBase 继承Form, 自己有点小改 ...

  2. WPF 触摸屏小键盘样式

    WPF程序,用于平板时,一些输入数量的地方我们需要弹出小键盘输入,这个键盘可以调系统的,也可以自己写. 分享个我现在用的一个数字键盘界面. <Window xmlns:dxe="htt ...

  3. 第二节:创建模型,使用Code First,配置映射关系

    这一节,实现模型的创建,配置映射关系 使用Code First数据迁移. 创建模型 一,首先创建几个接口:实体接口,聚合根接口,值对象接口 1,实体接口: 2,聚合根接口: 3,值对象接口: 二,模型 ...

  4. codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库

    一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...

  5. 在window主机上访问virtualbox虚拟机上centos7的tomcat服务

    在virtualbox上装完centos7后,随后装了tomcat服务器,然后在主机上发现用google浏览器访问tomcat不了 于是用ping检测下,发现ping不通,经过多方查找,才配置好,于是 ...

  6. Docker - Docker与Vagrant的区别

    Docker Docker - HomePage Wiki - Docker Docker简介 Overview Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协 ...

  7. h5文字超出,两行显示,超出显示省略号

    最近接到一个需求,要求商场导航里的文字最多显示两行,超出两行的省略号显示,查一些资料,又根据自己的需求,改了很多,直接上代码吧 <html> <head> <style ...

  8. switch...case... 语句中的类型转换

    switch语句对case表达式的结果类型有如下要求: 要求case表达式的结果能转换为switch表示式结果的类型 并且如果switch或case表达式的是无类型的常量时,会被自动转换为此种常量的默 ...

  9. POJ 2453

    #include <iostream> #include <algorithm> #include <cmath> #define MAXN 1000 #defin ...

  10. 李航统计学习方法——算法2k近邻法

    2.4.1 构造kd树 给定一个二维空间数据集,T={(2,3),(5,4),(9,6)(4,7),(8,1),(7,2)} ,构造的kd树见下图 2.4.2 kd树最近邻搜索算法 三.实现算法 下面 ...