springboot项目使用短信验证码的登录注册功能

一、 操作流程

  1. 用户输入手机号,点击发送验证码按钮
  2. 前端将手机号发送给后端
  3. 后端生成一个6位的随机数通过短信发送给用户,之后手机号为key,随机数为value,存入缓存中,最后将短信发送是否成功的结果返回给前端。
  4. 当用户收到短信后,输入验证码,点击登录或者注册。
  5. 前端将手机号与验证码,发送给后端
  6. 后端通过缓存验证用户的验证码是否正确,再将结果返回给前端
  7. 用户的验证码登录流程结束

二、实现流程

  1. 阿里云短信服务
    1. 购买短信服务(以前有100条免费的短信,现在不知道)
      在这里插入图片描述
    2. 添加签名与模板
      1. 选择左侧的国内消息
        在这里插入图片描述
      2. 签名管理中选择添加签名(签名就是发送短信时的程序名或公司名)
      3. 模板管理添加模板(也就是发送短信的内容)
    3. 获取自己的阿里云私匙
      1. 左侧点击概览
        在这里插入图片描述
      2. 选择AccessKey(获得私匙)
    4. 获取发送短信的代码
      1. 选择 OpenAPI(每个框的后面的问号是解释,填完框后将代码粘贴到idea中)
        在这里插入图片描述
  2. 书写idea里的代码
    1. 添加pom.xml文件
<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.0.0</version>
        </dependency>
  1. 添加阿里云短信服务(自行修改4处*****位置的值)
package com.example.shop_three.util;
@Component
public class Message {
    @Autowired
    RedisUtils redisUtils;


    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();
        }
    }
}
  1. 服务器布置redis(之前已经安装好redis的,或者本机有reids的跳过本步骤)
    链接: 服务器redis的快速布置
  2. 添加redis工具类
package com.example.huaweiyun.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 读取缓存
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 写入缓存
     */
    public boolean set(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 更新缓存
     */
    public boolean getAndSet(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().getAndSet(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 删除缓存
     */
    public boolean delete(final String key) {
        boolean result = false;
        try {
            redisTemplate.delete(key);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}
  1. application文件添加
spring.redis.host= redis服务器地址
spring.redis.port=6379
spring.redis.password=redis密码
  1. service层代码
    1. 获取验证码
    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);
    }
		2. 验证码登录
public String authcode_login(String u_phone, String authcode) {

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

三、实现图片

  1. 请求验证码
    在这里插入图片描述
    2.验证码登录
    在这里插入图片描述

有问题请评论区留言

  • 4
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值