SpringBoot实现短信验证码登录功能(案例)

 更新时间:2024年08月02日 11:53:01   作者:zlin55  
这篇文章主要介绍了SpringBoot实现短信验证码登录功能,本文通过实例代码给大家介绍的非常详细,对大家大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、要找一个提供短信接口的第三方平台,这里我使用的是榛子云
二、在注册后,就可以使用了
三、首先是在pom.xml中添加依赖

<!-- fastjosn -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.4</version>
</dependency>
<dependency>
    <groupId>com.zhenzikj</groupId>
    <artifactId>zhenzisms</artifactId>
    <version>1.0.2</version>
</dependency>

1.验证码发送的controller

package com.foreknow.controller;
import com.alibaba.fastjson.JSONObject;
import com.foreknow.model.Member;
import com.foreknow.service.MemberService;
import com.zhenzi.sms.ZhenziSmsClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.Random;
@Controller
public class CodeController {
	//短信平台相关参数
	//这个不用改
	private String apiUrl = "https://sms_developer.zhenzikj.com";
	//榛子云系统上获取
	private String appId = "100862";
	private String appSecret = "62358d10-bc0e-4152-a52c-578a8debc9b9";
	@ResponseBody
	@GetMapping("/fitness/code")
	public boolean getCode(@RequestParam("memPhone") String memPhone, HttpSession httpSession){
       try {
	        JSONObject json = null;
	        //随机生成验证码
	        String code = String.valueOf(new Random().nextInt(999999));
	        //将验证码通过榛子云接口发送至手机
	        ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret);
	        String result = client.send(memPhone, "您的验证码为:" + code + ",该码有效期为5分钟,该码只能使用一次!");
	        json = JSONObject.parseObject(result);
	        if (json.getIntValue("code")!=0){//发送短信失败
	            return  false;
	        }
	        //将验证码存到session中,同时存入创建时间
	        //以json存放,这里使用的是阿里的fastjson
	        json = new JSONObject();
	        json.put("memPhone",memPhone);
	        json.put("code",code);
	        json.put("createTime",System.currentTimeMillis());
	        // 将认证码存入SESSION
	        httpSession.setAttribute("code",json);
	        return true;
        } catch (Exception e) {
            e.printStackTrace();
             return false;
        }    
	}
}

其中的局部变量是在榛子云的个人中心获取:

登录时从session中获取刚刚发送到手机的验证码对象:

JSONObject userCode = (JSONObject)session.getAttribute("code");
//验证码
userCode .get("code");
//手机号
userCode.get("memPhone");

前端限制60秒只能获取一次验证码的效果实现:

<div id="model2">
    <div class="layui-form-item input-item">
        <label for="userName">手机号</label>
        <input type="text" placeholder="请输入手机号" autocomplete="off" id="memPhone" name="memPhone" class="layui-input">
    </div>
    <div class="layui-form-item input-item">
        <label for="userName">验证码</label>
        <input type="text" placeholder="请输入验证码" autocomplete="off" id="code" name="code" maxlength="6" class="layui-input" style="width: 50%;display: inline">
        <input type="button" class="layui-btn layui-btn-primary" value="获取验证码" id="sendBtn" style="width:41%;margin-left: 18px;border-color:#1e9fff !important;" onclick="sendCode(this)"></input>
    </div>
</div>
 function sendCode(){
       var memPhone = $("#memPhone").val();
       console.log(memPhone.length);
       if(memPhone == '' || memPhone.length != 11){
           layer.msg("请输入正确的手机号!");
           return;
       }else{
           $.ajax({
               type: 'GET',
               url: '[[${basePath}]]/fitness/code',
               data: {
                   memPhone : memPhone
               },
               dataType: 'json',
               success: function(data) {
                  if(data){
                      timer();
                  }else{
                      layer.msg("获取验证码失败");
                  }
               },
               error: function(data) {
                   layer.msg('连接超时!');
               },
           });
       }
   }
   var wait = 60;
   //倒计时
   function timer() {
       if(wait == 0){
           $("#sendBtn").val("获取验证码");
           $("#sendBtn").removeAttr("disabled");
           $("#sendBtn").css("border-color","1e9fff").css("background", "#ffffff").css("cursor", "pointer");
           wait = 60;
       }else{
           $("#sendBtn").attr("disabled","true");
           $("#sendBtn").css("border-color","fbfbfb").css("background", "#ccc").css("cursor", "not-allowed");
           $("#sendBtn").val(wait + "秒后重发");
           wait--;
           setTimeout(function() {timer()}, 1000);
       }
   }

到此这篇关于SpringBoot实现短信验证码登录的文章就介绍到这了,更多相关SpringBoot短信验证码登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android字体相关知识总结

    Android字体相关知识总结

    最近接到一个需求,大致内容是:全局替换当前项目中的默认字体,并引入 UI 设计师提供的一些新字体。于是对字体做了些研究,把自己的一些心得分享给大家。注意:本文所展示的系统源码都是基于Android-30 ,并提取核心部分进行分析
    2021-06-06
  • Android仿打开微信红包动画效果实现代码

    Android仿打开微信红包动画效果实现代码

    这篇文章主要介绍了Android仿打开微信红包动画效果实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 在Android模拟器上模拟GPS功能总是null的解决方法

    在Android模拟器上模拟GPS功能总是null的解决方法

    在我们开发时需要在模拟器上模拟GPS,可在Location的时候总是null,下面与大家分享下具体的解决方法,感兴趣的朋友可以参考下哈
    2013-06-06
  • Android中的AppWidget入门教程

    Android中的AppWidget入门教程

    这篇文章主要介绍了Android中的AppWidget入门教程,本文起讲解了如何创建一个简单的AppWidget、如何使得AppWidget与客户端程序交互等内容,需要的朋友可以参考下
    2015-03-03
  • Android实现倒计时的方案梳理

    Android实现倒计时的方案梳理

    这篇文章主要介绍了Android实现倒计时的方案梳理,下面文章围绕主题展开Android倒计时方案,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Mac下完全卸载干净Android Studio的方法

    Mac下完全卸载干净Android Studio的方法

    这篇文章主要介绍了Mac下完全卸载干净Android Studio的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android RecyclerView滑动删除和拖动排序

    Android RecyclerView滑动删除和拖动排序

    这篇文章主要介绍了Android RecyclerView滑动删除和拖动排序的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 详解Android Flutter如何自定义动画路由

    详解Android Flutter如何自定义动画路由

    flutter中有默认的Route组件,叫做MaterialPageRoute,但是MaterialPageRoute太普通了,如果我们想要做点不同的跳转特效应该如何处理呢?一起来看看吧
    2023-04-04
  • Android xml实现animation的4种动画效果实例代码

    Android xml实现animation的4种动画效果实例代码

    在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。本文给大家介绍Android xml实现animation的4种动画效果实例代码,一起看看吧
    2016-05-05
  • android实现通知栏下载更新app示例

    android实现通知栏下载更新app示例

    这篇文章主要介绍了android实现通知栏下载更新app示例,需要的朋友可以参考下
    2014-03-03

最新评论