短信验证码登陆基于Redis

1.先在一些短信平台进行注册配置短信格式等等。
我的用的是秒嘀。

2.`package com.spring.test.SMS;
/**

  • 系统常量
    /
    public class Config
    {
    /
    *

    /**

    • 开发者注册后系统自动生成的账号,可在官网登录后查看
      */
      public static final String ACCOUNT_SID = “404fd80aae20476a9cc376007117bb70”;

    /**

    • 开发者注册后系统自动生成的TOKEN,可在官网登录后查看
      */
      public static final String AUTH_TOKEN = “8e4fa096cd504ab9b57c097ada403cbd”;

    /**

    • 响应数据类型, JSON或XML
      */
      public static final String RESP_DATA_TYPE = “json”;
      }

3.package com.spring.test.SMS;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.codec.digest.DigestUtils;

/**

  • 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;
      }
      }
      4.package com.spring.test.SMS;
      import java.net.URLEncoder;

import com.spring.test.SMS.Config;
import com.spring.test.SMS.HttpUtil;
import com.spring.test.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**

  • 验证码通知短信接口
  • @ClassName: IndustrySMS
  • @Description: 验证码通知短信接口

*/
@Service(“industrySMS”)
public class IndustrySMS
{
@Autowired
private static RedisUtils redisUtils;
private static String operation = “/industrySMS/sendSMS”;

private static String accountSid = Config.ACCOUNT_SID;
private static String to = "17863051322";

private static String code = smsCode();
//  登录验证码:{1},如非本人操作,请忽略此短信。
private static String smsContent = "【欧阳科技】登录验证码:"+code+",如非本人操作,请忽略此短信。";

/**
 * 验证码通知短信
 */
public static SMSDetail execute()
{

    SMSDetail smsDetail =new SMSDetail();
    smsDetail.setCode(code);
    smsDetail.setTo(to);
    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);
    return smsDetail;
}

//创建验证码
public static String smsCode(){
    String random=(int)((Math.random()*9+1)*100000)+"";
    System.out.println("验证码:"+random);
    return random;

}

}`

5.`package com.spring.test.SMS;

public class SMSDetail {

private  String code;
private  String to;

public String getTo() {
    return to;
}

public void setTo(String to) {
    this.to = to;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

}
6.package com.spring.test.SMS;

import com.alibaba.fastjson.JSONObject;
import com.spring.test.Email.EmailDetail;
import com.spring.test.redis.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Scanner;

@Service(“pd”)
public class pd {
@Autowired
private static RedisUtils redisUtils;

public static void pd() {
    Scanner input = new Scanner(System.in);

    SMSDetail a = new SMSDetail();
    System.out.println("请输入验证码:");
    String code = input.next();
    String sms = (String) redisUtils.get("SMS");
    SMSDetail parse = JSONObject.parseObject(sms, SMSDetail.class);
    if (code.equals(parse.getCode())) {
        System.out.println("成功");
    } else {
        System.out.println("失败");
    }
}

}`
这一部分主要是进行登陆判断。
首先要得到redis中缓存的验证码信息(这个信息是一个String类型的)
所以要将它解析成Object类型。
然后在根据对象的code进行判断。

6.package com.spring.test.SMS;

import com.alibaba.fastjson.JSON;
import com.spring.test.Email.SendEmail;
import com.spring.test.redis.RedisUtils;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test
{

/**
 * @param args
 */
public static void main(String[] args)
{
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    context.start();
    RedisUtils redisUtils = (RedisUtils) context.getBean("redisUtils");
    redisUtils.set("SMS", JSON.toJSONString(IndustrySMS.execute()), 100L);
    pd.pd();
}

}
`
注入bean,将发送的短信(Object类)进行缓存。

总结一下
将要发送的短信内容,发给谁等等封装成对象
根据秒嘀提供的api进行配置,主要是to ,url ,ACCOUNT SID,AUTH TOKEN.
短信内容存入redis中要进行类型转换。转换成json。
当进行判断验证码是否正确的时候,要取到Redis中的信息(根据key)并解析成对象。

redis这里代码不全以后慢慢写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值