Springboot实现短信验证登录

一、介绍

使用短信验证登录也是现在实际项目中普遍使用的一种登录,

二、实际的操作流程

1.用户在前端页面输入手机号码之后,点击发送验证码

2.前端将手机号传给后端

3.后端生成一个6为的随机数通过短信发送给用户,之后将手机号设为key,验证码设为value存入redis缓存中,最后将短信发送是否成功返回给前端

4.当用户收到短信后,输入验证码,点击登录

5.前端将手机号和验证码发送和后端

6.后端从缓存中获取key和value,验证输入的验证码是否正确,在将结果返回给前端

7.短信验证结束

三、项目实现

1.去阿里云官网购买短信服务,阿里云官网https://www.aliyun.com/

2.添加签名和模板

点击左侧国内消息,先进行审核,必须是审核通过状态

Springboot实现短信验证登录_第1张图片

3.签名管理中添加签名,签名就是发送短信时的公司名

4.模板管理添加模板,内容就是发送短信的内容

5.获取阿里云私钥

点击左侧概览,在后侧看见

Springboot实现短信验证登录_第2张图片

6.获取发送短信的代码

Springboot实现短信验证登录_第3张图片

7.在idea中编写代码

7.1添加pom依赖


            com.aliyun
            aliyun-java-sdk-core
            4.4.0
        
        
            com.aliyun
            aliyun-java-sdk-dysmsapi
            1.0.0
        

7.2添加阿里云短信服务,修改四处,

package com.imooc_miaosha.controller;

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 org.springframework.stereotype.Component;


@Component
public class Message {

    public static void messagePost(String u_phone, String message){
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "*******", "**********");
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers",u_phone);
        request.putQueryParameter("SignName", "*******");
        request.putQueryParameter("TemplateCode", "********");
        request.putQueryParameter("TemplateParam", "{\"code\":"+message+"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

其中这里四处是对应自己短信服务的信息

Springboot实现短信验证登录_第4张图片

7.3若你已经配置好redis了可以进行下一步,

若你还没有配置好redis,先去进行redis进行配置

7.4添加redis工具类

package com.imooc_miaosha.util;

//package com.example.huaweiyun.util;
import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import sun.rmi.runtime.Log;

@Component
public class RedisUtils {

    @Autowired
    JedisPool jedisPool;

    /**
     * 读取缓存
     *
     * @param key
     * @return
     */
    public String get( String key) {
        Jedis jedis = null;
        try{
            jedis=jedisPool.getResource();
            String value = jedis.get(key);
            return value;
        }finally{
            jedis.close();
        }

    }

    /**
     * 写入缓存
     */
    public boolean set(final String key, String value) {
        Jedis jedis = null;
        try {
            jedis=jedisPool.getResource();
            jedis.set(key, value);
            return true;
        } finally {
            jedis.close();
        }
    }



}

7.5service层代码

///获取验证码
    public String authcode_get(String u_phone) {
        String authcode = "1"+RandomStringUtils.randomNumeric(5);//生成随机数,我发现生成5位随机数时,如果开头为0,发送的短信只有4位,这里开头加个1,保证短信的正确性
        redisUtils.set(u_phone,authcode);//将验证码存入缓存
        Message.messagePost(u_phone,authcode);//发送短息
        return "发送成功"+authcode);
    }
////验证码进行验证
public String authcode_login(String u_phone, String authcode) {

      if(redisUtils.get(u_phone).equals(authcode)){
             return "登录成功";
      }else {
          return "登录失败";
      }

7.5  自行设计一个前端页面即可,由于在前端和后端交互过程中出了有点问题,所以前端页面并没有贴出来,但是确实可以发送短信到手机上

Springboot实现短信验证登录_第5张图片

你可能感兴趣的:(Springboot实现短信验证登录)