基于阿里云短信服务的防机器人验证
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 登录ECS服务器
本次实验我们会学习通过API发送短信,简单的JS脚本等开发技能。
实验资源包含一台ECS服务器,使用的是Windows系统,镜像中包含IDEA开发工具,登录ECS后便可以编写代码学习短信发送等具体知识。
这一小结,我们首选要登录上ECS服务器,假设学员正在使用Winodws7或以上系统。
- 打开win远程连接工具
- 通过快捷键“Win标徽键+R键”调出运行窗口。
- 在运行窗口中输入mstsc,单击确定。
- 登录服务器需要先输入服务器IP地址
- 将实验资源处的云服务器ECS的弹性IP复制到win远程连接工具上。
- 单击连接按钮
- 登录服务器还需要输入服务器的用户和密码
- 在上一步弹出的对话空中,依次输入云服务器ECS的用户名和密码。
- 单击确定按钮
注意:由于学员电脑可能有不同的Windows版本,界面可能略有不同
- 登录服务器成功
- 上一步点击确定后,可能会弹出如下图所示对话框,直接点击是即可登录成功
- 打开IDEA开发工具
- 在远程窗口中,双击桌面的IDEA图标
注意:如有使用有效期提醒使用yqsys2023和Yqsys@2023#登录试用
3. 使用JAVA和短信服务API发送短信
这一小结我们学习如何用IDEA工具编写JAVA程序调用阿里云API发送短信
重要提醒:本实验每用户短信接收上限为4条,请勿反复尝试,正常情况2条短信即可完成实验
- 创建一个Java类
- 依次展开src>main>java>com.....目录
- 在最后一级目录上单击右键>再单击新建>再单击Java类
- 再弹出的对话框中输入类的名字SMSDemo,然后直接回车
- 在SMSDemo类中创建主方法。
- 在类名后面大括号后输入main,随后直接回车,会自动生成一个标准的主方法
main方法也叫主方法,是一个程序执行的起点。在SMSDemo类中,只需要键入main四个字母IDEA就会提示是否需要完整的主方法,这时按下回车键,一个完整的主方法就编写好了,
- 查看Sendsms类关于发送短信的代码逻辑
- 双击左侧Sendsms文件,右侧就会打开这个文件的内容
- 仔细查看截图,下一步只需要调用Sendsms的send方法就可以发送短信了
- 在SMSDemo类中编写发送短信的代码
- 如图所示在主方法小括号后添加异常抛出throws Exception
- 如果所示在主方法大括号内添加Sendsms.send("18627162842",1234); 含义为调用Sendsms的send方法,并传入你自己的手机号码和一个随机的验证码
- 在SMSDemo类中执行发送短信的程序
- 在空白处单击右键,在弹出的菜单中,单击运行’SMSDemo.main()‘的选项
- 观察程序运行结束后的提示
- 此时你的手机上会收到一条测试短信
至此,本小节发送短信的功能学习结束
4. 学习原生JS和正则表达式
这一小节学习原生JS和正则表达式
- 首选创建一个html文件
- 依次展开src>main>webapp目录
- 依次执行右键单击webapp、单击新建、单击HTML文件
- 在弹出的对话框中给新建的html文件取个名字,如demo
- 在新建的html文件中插入一段代码,并学习代码含义
- 将如下代码插入到<body></body>标签内,并仔细查看代码中注释的含义
<!--script内是JS原生代码--> <script> //这是一个函数,当页面按钮被点击时会被触发调用 function vcdisplay() { //获取到页面的文本输入框输入的内容,取名叫做tel var tel = document.getElementById("tel").value; //设置一个正则表达式的规则,用regPhone表示,规则是第一位数字是1,后面有且只能有10位数字 var regPhone = /[1]{1}[0-9]{10}/; //当按钮点击时,如果文本框内什么也没有输入,则提示“请输入手机号码” if (tel === "") { alert("请输入手机号码") return; //如果文本框内的内容不符合正则表达式规则,则提示手机号格式错误 } else if (!regPhone.test(tel)) { alert("手机号格式错误"); return; } } </script> <!--这是一个文本输入框,用来输入电话号码--> <input id = "tel" name="tel" placeholder="手机号" type="text"> <!--这是一个按钮当点击按钮的时候会调用vcdisplay()这个自定义js函数--> <button onclick="vcdisplay()" type="button">获取验证码</button>
- 测试页面效果
- 在空白处单击鼠标右键
- 在弹出的菜单中单击运行’demo.html‘
- 在显示的页面中依次尝试如下操作,并体会代码的执行逻辑
- 不输入任何内容,直接点击按钮,会提示请输入手机号码
- 输入10位号码,点击按钮,会提示手机号码格式错误
- 输入11位号码,但是第一位是4,也会提示手机号码格式错误
- 输入一个1开头,后面有且只能有10位的数字,就不会报错了
最后关闭浏览器,本小节知识学习完毕
5. 服务代码开发和学习
这一小节学习服务端开发的开发,本小节无需编写代码,理解已经编写好的代码即可
- 打开VCser文件,当有用户输入姓名和电话后点击获取验证码的时候,会来到doGet方法具体的执行流程如下
- 创建一个临时的键值对存储集合,用来存储电话和验证码的对应关系
- 当用户点击获取验证码的时候,会来到如下doGet请求(也可以叫做doGet方法)
- 在doGet方法内首先会获取用户输入的姓名和电话
- 然后随机生成一个4位数,用作验证码,范围1000~9999
- 将以上姓名、电话、验证码在控制台打印出来,这个内容在用户界面是无法看到的
- 调用发送短信的方法,给用户的电话发送短信附带验证码
- 将验证码存储到集合备用
- 依旧在VCser文件中,往下滚动可以看到doPost请求。
- 当用户填写好验证码,并点击提交按钮时,会来到doPost方法,
- doPost方法中首先会获取用户输入的姓名电话和验证码
- 将电话和验证码在上面的集合中查询,如果存在则返回一个登录成功的页面
- 如果查询不存在,则返回一个登录失败的页面
这一小结,不需要实操,学习代码逻辑即可
6. 短信验证码登录测试
这一小节我们完成验证码登录的测试环节
- 首先要将我们的项目添加到web服务中去
- 单击下面服务按钮
- 单击左侧菱形工件按钮
- 在弹出的对话框中选中yzm1226:war文件
- 单击添加,随后会看到yzm1226:war移到右边了
- 单击确定
- 开启web服务
- 单击左边三角形按钮,开启服务
- 观察下方右侧打印的日志页面
- 大约5~10秒后,服务已开启,会自动打开浏览器,显示如图页面
- 获取验证码
- 输入正确的姓名和正确的手机号码
- 单击获取验证码按钮
- 大约2~3秒后会看到验证码发送成功,同时手机上会看到验证码
- 输入验证码尝试登录
注意:在下方控制台日志打印窗口也可以看到验证码的日志信息
重要提醒:本实验每用户短信接收上限为4条,请勿反复尝试,正常情况2条短信即可完成实验
- 点击提交后查看登录效果,如果电话号码和验证码输入无误,则会提示登录成功,否则登录失败
至此,实验结束,学员可以自行查看
index.html
VCser文件内的服务端业务逻辑,
实验链接:https://developer.aliyun.com/adc/scenario/982742f4c8a24a0f84c5608475a959d5