spring boot中如何实现在手机注册和登录时获取验证码(阿里短信服务)

简介: 为了实现在手机注册和登录时获取手机验证码,我使用了阿里的短信服务,下面就来介绍一下具体如何实现。将介绍代码层面如何使用的,去阿里开通该服务,以及如何获得你的accessKeyId和accessKeySecret等。

为了实现在手机注册和登录时获取手机验证码,我使用了阿里的短信服务,下面就来介绍一下具体如何实现。将介绍代码层面如何使用的,去阿里开通该服务,以及如何获得你的accessKeyId和accessKeySecret等。

image.png

一、在pom.xml中引入阿里的短信服务依赖

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.0</version>
        </dependency>

二、在util工具包下新建一个发送短信类SmsService

1、对里面的一些参数进行介绍:

(1)TemplateCode是阿里>短信服务>国内消息>模板管理中的对应消息的模板CODE值。

(2)accessKeyid和accessKeySecret需要登录阿里云网站>点击头像>accessKeys,到里面新建用户拿到。拿到以后我们需要在权限管理处给该用户授权管理短信服务的权限,没有的话会报错。这两个属性只会在新建的时候出现一次,注意保存。


(3)SignName必须设置,是你的短信签名,在签名管理中找签名名称。


(4)TemplateParam给短信模板中设置的参数赋值,有几个参数名赋几个参数,键和你赋的值对应。


(5)其他的基本都好理解了,也不需要改动。

public class SmsService {
    public static void send(String phone,String key){
//第二个参数为自己独有的accessKeyid,第三个参数为自己独有的accessKeySecret
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou",
                "LTAI1hYCS9XTEacVqo","0ynfa4RQlbrDpvSz3jZpszcik6aLAAM");
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();//组装请求对象
        //request.setProtocol(ProtocolType.HTTPS);
        request.setMethod(MethodType.POST);//设置post提交
        request.setDomain("dysmsapi.aliyuncs.com");//短信API产品域名(接口地址固定,无需修改)
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", "健康教育");//短信签名
        request.putQueryParameter("TemplateCode", "SMS_162731312");
        request.putQueryParameter("TemplateParam", "{code:"+key+"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
}
}

2、为了测试一下,是否配置成功,我们可以在该类中写一个main方法传参进去,运行项目看看收到没,代码如下:成功以后,把这个类中的main方法删除即可。

    public static  void main(String []args){
        SmsService.send("18438595560","1100");
    }

三、我们在业务中调用这个类就可以发送短信验证了。


1、简单举个controller类中我调用的的例子。


(1)我们通过前台用户点击获取验证码,使用ajax技术把用户的手机号传过来,session中保存我后台生成的code,为了将来拿出来与用户提交的进行比较。拿到验证码和手机号调用SmsService类发送过去。可以借鉴一下:

/**
     * 后台获得验证码
     */
    @RequestMapping("/getcode")
    @ResponseBody
    public int getcode(String phone) {
        long l=System.currentTimeMillis();
        int k1=(int) (l%10000);
        String code=String.valueOf(k1);
        //session中保存我后台生成的code,为了将来拿出来与用户提交的进行比较。
        Subject subject = SecurityUtils.getSubject();
        Session session = subject.getSession();
        session.setAttribute("autocode",code);
        //成功返回0,失败返回1
        if(phone!=null){
            //把后台生成的code和所发送的手机号传进发送消息类,调用执行。
            SmsService.send(phone,code);
            return 0;
        }else{
            return 1;
        }
    }

(2)当用户在前台验证码框输入验证码后,离开表单时,通过ajax把输入的验证码传到后台与后台生成的验证码进行比较,根据比较结果返回不同的响应。通过这种方式进行验证码正确性比较,显而易见,在用户提交表单之前我们就进行了正确性比较,不对的话用户会收到提示,根本不会提交表单成功!

 /**
     *判断验证码的正确性
     */
    @RequestMapping("/comparecode")
    @ResponseBody
    public int authorization(String preauthcode) {
        Subject subject = SecurityUtils.getSubject();
        Session session = subject.getSession();
        String autocode= (String) session.getAttribute("autocode");
        //验证码不为空时,到后台进行比较,返回响应码,为1,提示请先获得验证码
        //为2,提示验证码错误
        //为3,验证码正确,无提示
        if(autocode==null){
            return 1;
        }else if(autocode.equals(preauthcode)){
            return 3;
        }else{
            return 2;
        }
    }

四、以上就是使用阿里短信服务实现手机验证码的过程,思路比较简单,只具体阐释了发送短信类的参数,以及后台验证的具体实现,前台代码就很简单了,使用表单和写一些ajax代码。

目录
相关文章
|
23天前
|
JavaScript 前端开发 Java
基于springboot的手机销售网站
本研究聚焦手机商城系统的发展现状与趋势,探讨其技术架构、用户行为分析及安全支付等问题,结合Java、Vue、MySQL等技术实现高效、安全的移动端电商平台,推动行业创新与融合发展。
|
7月前
|
存储 Java 数据库
Spring Boot 注册登录系统:问题总结与优化实践
在Spring Boot开发中,注册登录模块常面临数据库设计、密码加密、权限配置及用户体验等问题。本文以便利店销售系统为例,详细解析四大类问题:数据库字段约束(如默认值缺失)、密码加密(明文存储风险)、Spring Security配置(路径权限不当)以及表单交互(数据丢失与提示不足)。通过优化数据库结构、引入BCrypt加密、完善安全配置和改进用户交互,提供了一套全面的解决方案,助力开发者构建更 robust 的系统。
201 0
|
4月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
4月前
|
API 数据安全/隐私保护 Python
批量发短信的软件,自动群发短信批量工具,手机号电话生成脚本插件【python】
该工具包含三个核心模块:短信发送核心功能、配置管理系统和命令行界面。使用时需先配置API密钥和短信模板
|
8月前
|
存储 机器学习/深度学习 人工智能
TaoAvatar:手机拍出电影级虚拟人!阿里3D高斯黑科技让动捕设备下岗
阿里巴巴最新推出的TaoAvatar技术,通过3D高斯溅射实现照片级虚拟人实时渲染,支持多信号驱动与90FPS流畅运行,将彻底改变电商直播与远程会议体验。
521 8
TaoAvatar:手机拍出电影级虚拟人!阿里3D高斯黑科技让动捕设备下岗
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
10月前
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
229 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
Discuz! X3.5插件云诺-阿里云短信手机登录 会员登录后也无法查看附件图片的问题解决方法
Discuz! X3.5插件云诺-阿里云短信手机登录 会员登录后也无法查看附件图片的问题解决方法
216 2
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
4285 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)