zoukankan      html  css  js  c++  java
  • 四步,搞定一个短信验证码登录!

    1、构造手机验证码:使用random对象生成要求的随机数作为验证码,例如4位验证码:1000~9999之间随机数;

    2、使用接口向短信平台发送手机号和验证码数据,然后短信平台再把验证码发送到制定手机号上,接口参数一般包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令;

    3、保存接口返回的信息(一般为json文本数据,然后需转换为json对象格式);

    4、将手机号--验证码、操作时间存入Session中,作为后面验证使用;

    5、接收用户填写的验证码及其他数据;

    6、对比提交的验证码与Session中的验证码是否一致,同时判断提交动作是否在有效期内;

    7、验证码正确且在有效期内,请求通过,处理相应的业务。

    一、首先添加一个jar包,工具类会用到。

    <!--秒滴云的jar包-->
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.11</version>
    </dependency>
    

    我这里只是编写一个简单的短信验证功能,要是用其他的语音验证。。。。等等需要去秒滴云官方下载文档,下面是编写的一个config文档,专门存放一些参数。

    img

    二、编写http请求工具类

    public class HttpUtil
    {
       /**
        * 构造通用参数timestamp、sig和respDataType
        * 
        * @return
        */
       public static String createCommonParam()
       {
          // 时间戳
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
          String timestamp = sdf.format(new Date());
    
          // 签名
          String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp);
    
          return "&timestamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
       }
    
       /**
        * post请求
        * 
        * @param url
        *            功能和操作
        * @param body
        *            要post的数据
        * @return
        * @throws IOException
        */
       public static String post(String url, String body)
       {
          System.out.println("url:" + System.lineSeparator() + url);
          System.out.println("body:" + System.lineSeparator() + body);
    
          String result = "";
          try
          {
             OutputStreamWriter out = null;
             BufferedReader in = null;
             URL realUrl = new URL(url);
             URLConnection conn = realUrl.openConnection();
    
             // 设置连接参数
             conn.setDoOutput(true);
             conn.setDoInput(true);
             conn.setConnectTimeout(5000);
             conn.setReadTimeout(20000);
             conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
             // 提交数据
             out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
             out.write(body);
             out.flush();
    
             // 读取返回数据
             in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
             String line = "";
             boolean firstLine = true; // 读第一行不加换行符
             while ((line = in.readLine()) != null)
             {
                if (firstLine)
                {
                   firstLine = false;
                } else
                {
                   result += System.lineSeparator();
                }
                result += line;
             }
          } catch (Exception e)
          {
             e.printStackTrace();
          }
          return result;
       }
    
       /**
        * 回调测试工具方法
        * 
        * @param url
        * @param reqStr
        * @return
        */
       public static String postHuiDiao(String url, String body)
       {
          String result = "";
          try
          {
             OutputStreamWriter out = null;
             BufferedReader in = null;
             URL realUrl = new URL(url);
             URLConnection conn = realUrl.openConnection();
    
             // 设置连接参数
             conn.setDoOutput(true);
             conn.setDoInput(true);
             conn.setConnectTimeout(5000);
             conn.setReadTimeout(20000);
    
             // 提交数据
             out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
             out.write(body);
             out.flush();
    
             // 读取返回数据
             in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
             String line = "";
             boolean firstLine = true; // 读第一行不加换行符
             while ((line = in.readLine()) != null)
             {
                if (firstLine)
                {
                   firstLine = false;
                } else
                {
                   result += System.lineSeparator();
                }
                result += line;
             }
          } catch (Exception e)
          {
             e.printStackTrace();
          }
          return result;
       }
    }
    

    三、生成四位数的方法

    public static String runNumber() {
       String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       StringBuilder sb=new StringBuilder(4);
       for(int i=0;i<4;i++)
       {
          char ch=str.charAt(new Random().nextInt(str.length()));
          sb.append(ch);
       }
       System.out.println(sb.toString());
       String code = sb.toString();
       return code;
    }
    

    四、执行方法execute(),便会发送成功

    public class IndustrySMS
    {
       private static String operation = "/industrySMS/sendSMS";
    
       private static String accountSid = Config.ACCOUNT_SID;
       private static String to = "15342349382";
       private static String smsContent = "【小陶科技】登录验证码:{"+runNumber().toString()+"},如非本人操作,请忽略此短信。";
    
       /**
        * 验证码通知短信
        */
       public static void execute()
       {
          String tmpSmsContent = null;
           try{
             tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");
           }catch(Exception e){
             
           }
           String url = Config.BASE_URL + operation;
           String body = "accountSid=" + accountSid + "&to=" + to + "&smsContent=" + tmpSmsContent
               + HttpUtil.createCommonParam();
    
           // 提交请求
           String result = HttpUtil.post(url, body);
           System.out.println("result:" + System.lineSeparator() + result);
       }
    

    作者: classabcd
    本文链接:https://blog.csdn.net/classabcd/article/details/82464582
    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    近期热文推荐:

    1.Java 15 正式发布, 14 个新特性,刷新你的认知!!

    2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

    3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

    4.吊打 Tomcat ,Undertow 性能很炸!!

    5.《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    September 29th 2017 Week 39th Friday
    September 28th 2017 Week 39th Thursday
    September 27th 2017 Week 39th Wednesday
    September 26th 2017 Week 39th Tuesday
    September 25th 2017 Week 39th Monday
    September 24th 2017 Week 39th Sunday
    angular2 学习笔记 ( Form 表单 )
    angular2 学习笔记 ( Component 组件)
    angular2 学习笔记 ( Http 请求)
    angular2 学习笔记 ( Router 路由 )
  • 原文地址:https://www.cnblogs.com/javastack/p/14383277.html
Copyright © 2011-2022 走看看