上海手机站网站建设/济南网站建设哪家专业
1、使用Post异步发送请求(发送短信),离焦事件触发时判断
<script src="layer/layer.js"></script><!--离焦事件--><script type="text/javascript" th:inline="javascript">$("#username").blur(function(){//判断用户名谁否符合手机号的格式,正则if(/^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/.test($("#username").val())){//如果符合,发短信,$.post (ajax)var telephone = $("#username").val()$.post(//url 给/sendSMS权限放行[[@{~/sendSMS}]],//参数{"telephone":telephone},//回调函数function(data){alert("success")},//数据格式"json")}else{//不符合,给出提示信息layer.msg("手机号格式有误!!")}})$("#repassword").blur(function(){alert("repassword")})$("#SMS").blur(function(){alert("SMS")})</script>
package com.zzz.blog.controller;import ...@Controller
public class VisitorController {//ajax@RequestMapping("/sendSMS")@ResponseBody public String sendSMS(String telephone) {//给手机号发信息System.out.println(telephone);return "";}}
2、发送手机验证码(使用腾讯云短信服务,注册方法搜索之前文章)
复制qcloudsms-1.0.5.jar到工程bin文件夹下,并build path一下。
修改sendSMS方法
//ajax 给手机号发信息@RequestMapping("/sendSMS")@ResponseBody public String sendSMS(String telephone,HttpSession session) {//appid appkeyint appid = xxx;String appkey = "xxx";//短信模板idint templateId = xxx;//签名的名字String smsSign = "玄尺软件编程公众号";//给谁发String phoneNumber = telephone;//验证码String[] params = new String[1];Random r = new Random();String code = "";for(int i=0;i<4;i++) {code += r.nextInt(10);}//放入session域中session.setAttribute("SMS", code);params[0] = code;SmsSingleSender sender = new SmsSingleSender(appid, appkey);//地区、电话、模板id、验证码、签名SmsSingleSenderResult result;try {result = sender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");System.out.println(result);} catch (HTTPException | JSONException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "";}
3、判断手机号是否已存在
@Controller
public class VisitorController {@Autowiredprivate VisitorService visitorService;//ajax 给手机号发信息@RequestMapping("/sendSMS")@ResponseBody public String sendSMS(String telephone,HttpSession session) {//判断数据库是否存在该手机号//存在,不发送短信String json = null;if (visitorService.findVisitorByUsername(telephone) != null) {json = "{\"message\":"+false+"}";} //不存在,发送短信else {json = "{\"message\":"+true+"}";SMS(telephone, session);}return json;}public void SMS(String telephone,HttpSession session) {//appid appkeyint appid = xxx;String appkey = "xxx";//短信模板idint templateId = xxx;//签名的名字String smsSign = "玄尺软件编程公众号";//给谁发String phoneNumber = telephone;//验证码String[] params = new String[1];Random r = new Random();String code = "";for(int i=0;i<4;i++) {code += r.nextInt(10);}//放入session域中session.setAttribute("SMS", code);params[0] = code;SmsSingleSender sender = new SmsSingleSender(appid, appkey);//地区、电话、模板id、验证码、签名SmsSingleSenderResult result;try {result = sender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");System.out.println(result);} catch (HTTPException | JSONException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package com.zzz.blog.service;import ...
@Service
public interface VisitorService {Visitor saveVisitory(Visitor visitor);Visitor findVisitorByUsername(String telephone);}
package com.zzz.blog.service;import ...@Component
public class VisitorServiceImpl implements VisitorService{@Autowiredprivate VisitorRepository visitorRepository;@Overridepublic Visitor saveVisitory(Visitor visitor) {return visitorRepository.save(visitor);}@Overridepublic Visitor findVisitorByUsername(String telephone) {return visitorRepository.findVisitorByUsername(telephone);}}
package com.zzz.blog.repository;import ...public interface VisitorRepository extends CrudRepository<Visitor, Long>{@Query(value = "select * from visitor where username = ?1",nativeQuery = true)Visitor findVisitorByUsername(String telephone);}
<script type="text/javascript" th:inline="javascript">$("#errorMessage").hide();...//回调函数function(data){if(data.message){$("#errorMessage").hide();layer.msg("手机验证码已发送,请注意查收!!")}else{$("#errorMessage").show(); //在前面先调用先隐藏错误信息$("#errorMessage").html("该手机号已经被注册!!");}},...
4、测试发送短信以及用户名是否重复
测试发送短信成功以后,把验证码发送代码注释掉(因为发送短信需要收费)
System.out.println(code);// SmsSingleSender sender = new SmsSingleSender(appid, appkey);
// //地区、电话、模板id、验证码、签名
// SmsSingleSenderResult result;
// try {
// result = sender.sendWithParam("86", phoneNumber, templateId, params, smsSign, "", "");
// System.out.println(result);
// } catch (HTTPException | JSONException | IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
在visitor表中插入一条手机号用户数据,测试用户重复情况下的提示信息,测试通过。
5、判断两次密码是否一致
$("#repassword").blur(function(){//判断两次密码是否一致if($("#password").val() != $("#repassword").val()){$("#errorMessage").show();$("#errorMessage").html("两次密码输入不一致!!");}else{$("#errorMessage").hide();}})
6、测试判断手机验证码的正确性
$("#SMS").blur(function(){var sms = $("#SMS").val();$.post(//url 在securityconfig中给权限放行[[@{~/judgeSMS}]],//传参{"smsCode":sms},//回调参数function(data){if(data.message){$("#errorMessage").hide();layer.msg("验证码正确!!")}else{$("#errorMessage").show();$("#errorMessage").html("验证码错误!!");}},//数据格式"json")})
//在VisitorController中添加判断方法@RequestMapping("/judgeSMS")@ResponseBodypublic String judgeSMS(String smsCode,HttpSession session) {String codeInSession = (String)session.getAttribute("SMS");String json = null;if (smsCode.equals(codeInSession)) {json = "{\"message\":"+true+"}";} else {json = "{\"message\":"+false+"}";}return json;}
7、防止皮的用户注册提交错误的表单
...
<form id="visitorRegisterForm" th:action="@{~/registerVisitor}" class="login100-form validate-form">
...
<button onclick="submitButton()" type="button" class="login100-form-btn">注 册</button>
...<!--离焦事件--><script type="text/javascript" th:inline="javascript">$("#errorMessage").hide();var isOkUsername,isOkPassword,isOkSMS; //在每个离焦事件中第一句赋初值为false,在判断正确的逻辑里改值为true...function submitButton(){//防止皮的用户在输入有错误内容的时候注册if(isOkUsername==false){$("#errorMessage").show();$("#errorMessage").html("用户名重复或格式错误!!");}else if(isOkPassword==false){$("#errorMessage").show();$("#errorMessage").html("两次密码输入不一致!!");}else if(isOkSMS==false){$("#errorMessage").show();$("#errorMessage").html("验证码错误!!");}else{$("#visitorRegisterForm").submit()}} </script>
...
8、完成注册功能
@RequestMapping("/registerVisitor") //权限放行public String registerVisitor(Visitor visitor) {Random r = new Random();int random = r.nextInt(8) + 1;visitor.setImage("/images/1-"+random+".jpg");visitorService.saveVisitory(visitor);return "redirect:/visitorLogin";}
测试:输入内容,点击注册按钮,数据库中正确添加数据即可。
相关文章:

实现注册手机号用户
1、使用Post异步发送请求(发送短信),离焦事件触发时判断 <script src"layer/layer.js"></script><!--离焦事件--><script type"text/javascript" th:inline"javascript">$("#use…...

【2023年11月第四版教材】第15章《风险管理》(第三部分)
第15章《风险管理》(第三部分) 5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★ 7 过程3-实施定性风险分析7.1 实施定性风险分析7.2 数据分析★★★7.3 数据表现★★★7.4 项目文件(更新&#…...

datart导入hive连接包
datart读取hive数据时,需要先在datart的lib目录下导入hive jdbc相关的包,这里面有几个坑记录下: 1.和springboot中commons-lang3冲突 2.hive中带的jetty和springboot冲突 3.hive jdbc的包的版本号一定要小于登录hive服务端的版本ÿ…...

2023美团秋招一面面经-已过
批处理批处理一个sql下的若干条sql,如何提高速度,如果要分片的话如何分片 1.使用数据库的批处理功能来执行多个 SQL 语句。这可以减少每个 SQL 语句的通信开销。JDBC 中的 addBatch() 和 executeBatch() 方法可以用来执行批处理操作。 在程序开始时候设…...

ARM Day2
目录 实现1-100的累加 思维导图 实现1-100的累加 .text .globl _start _start:mov r1,#0x64mov r2,#0x1mov r4,#0x1 going:cmp r1,r4bcc endleaddcs r3,r3,r4add r4,r4,r2b going endle:stop:b stop .end思维导图...

手把手教你制作独特优惠促销微传单
您是否曾经想要为自己的业务或活动制作一张吸引人的微传单?以下是一份简单易懂的微传单制作教程,帮助您在短短四步内打造出精美的宣传海报。 1. 登录乔拓云,点击【微传单】 首先,打开乔拓云网站并点击【微传单】选项。您将进入一个…...

Qt-QImage-convertTo-copy-convertToFormat-格式转换
文章目录 1.copy2.convertToFormat3.QPainter4.总结 1.copy 深度复制图像格式数据,可以指定区域。 QImage copy(const QRect &rect QRect()) const;inline QImage copy(int x, int y, int w, int h) const{ return copy(QRect(x, y, w, h)); }2.convertToForm…...

asp.net core automapper的使用
1.安装automapper的nuget包 AutoMapper.Extensions.Microsoft.DependencyInjection 2.创建需要映射的类和转换后的类 public class studto{public int sn { get; set; }public string name { get; set; }public string sex { get; set; }public int age { get; set; }public s…...

自学WEB后端03-Node.js 语法
学习后端路线: JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,它提供了一种能够在服务器端运行 JavaScr…...

对象数组合并和去重
数组去重: 普通字符串/数字数组去重: 1. 利用Set的特性 > new Set(arr) 2. for遍历, indexOf判断是否存在 3. 利用对象去重, 因为对象的key有唯一性 数组合并: 可以使用克隆(克隆, 深克隆的那些方法) 对象数组去重: for循环, find或者findIndex判断是否存在, 然后不存…...

【AI语言模型】阿里推出音视频转文字引擎
一、前言 阿里的音视频转文字引擎可以正式使用,用户可体验所有AI功能,含全文概要、章节速览、发言总结等高阶AI功能。通过阿里云主账号登录,可享受以下权益: 每日登录,自动获得2小时转写时长; 每邀请1名好…...

YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进
💡本篇内容:YOLOv5改进D-LKA:在D-LKA结构的基础上进行多种改进结构,同时拥有Attention和大卷积核的能力,高效改进 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv5专属 论文理论部…...

Java项目-Spring Boot的生鲜网上交易系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统功能4 功能设计5系统详细设计5.1系统功能模块5.2后台功能模块5\.2\.1用户功…...

MySQL - group by分组查询 (查询操作 三)
功能介绍 group by: 对数据进行分组和聚合操作(可以操作单字段和多字段) having:过滤group by的结果,也就是在分组后添加筛选条件 基础语法 select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having ]; where 和 having的区…...

96.qt qml-http之XMLHttpRequest介绍详解使用
在QML中我们可以通过XMLHttpRequest 来实现http/https访问网络接口,接下来我们先来学习XMLHttpRequest类的常用部分、 由于QML的XMLHttpRequest少部分参数是没有的,所以本章来单独讲解下。下章我们来实现旋转请求按钮以及通用的JSON请求模板方法 1.XMLHttpRequest初步使用 …...

代码随想录算法训练营第五十天 | 123.买卖股票的最佳时机III 188. 买卖股票的最佳时机 IV
1. 买卖股票的最佳时机 III 123. 买卖股票的最佳时机 III - 力扣(LeetCode) * 定义 5 种状态: * 0: 没有操作, 1: 第一次买入, 2: 第一次卖出, 3: 第二次买入, 4: 第二次卖出 class Solution {public int maxProfit(int[] prices) {int length prices.l…...

详解window.print(),实现长列表打印分页
相信大家平时做项目时,打印需求很常见,但想把打印做好,还是要花点时间的。特别是长列表要分页的情况。 我们知道浏览原生 API window.print() 可以用于印当前窗口(window.document)视图内容。调用此方法会产生一个打印…...

使用Chatgpt编写的PHP数据库pdo操作类(增删改查)
摘要 将PDO封装成PHP类进行调用有很多好处,包括: 1、封装性和抽象性: 通过将PDO封装到一个类中,您可以将数据库操作逻辑与应用程序的其他部分分离开来,提高了代码的组织性和可维护性。这样,您只需在一个地…...

蓝桥杯2023年第十四届省赛真题-异或和之和--题解
目录 蓝桥杯2023年第十四届省赛真题-异或和之和 题目描述 输入格式 输出格式 样例输入 样例输出 【代码实现】 大家觉得写得可以的话,可以加入QQ群907575059. 蓝桥杯2023年第十四届省赛真题-异或和之和 时间限制: 3s 内存限制: 320MB 提交: 241 解决: 66 …...

Linux 常用命令学习笔记
Linux 常用命令学习笔记 文件操作 ls:列出当前目录下的文件和文件夹。 ls -l:以长格式显示文件和文件夹的详细信息。ls -a:显示所有文件,包括隐藏文件。 cd [目录]:切换到指定目录。pwd:显示当前工作目录…...

支撑电动汽车规模化,特来电智能化升级群充产品
9月26日,中国领先的充电网生态运营商特来电重磅发布智能群充4.0产品,标志着特来电群充产品体系进一步升级,充电行业迎来更高质量、更高性能的设备与系统,充电网基础设施将更好地支撑大规模电动汽车的发展。 群充技术路线引领充电…...

本次CTF·泰山杯网络安全的基础知识部分
简记23年九月参加的泰山杯网络安全的部分基础知识的题目,随时补充 1. 国密算法哪个属于公钥? SM2 a. 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法&#x…...

通信协议:Uart的Verilog实现(下)
4、UART接收器 UART接收器负责接收串行比特流,去除起始位和停止位,并以并行格式将数据保存到与主机数据总线相连的寄存器里。接收器无法获得发送时钟,因此尽管数据以标准比特率到达,但数据未必与接收主机内的时钟同步。同步问题可…...

嵌入式MCU都有什么高级用法?
嵌入式MCU都有什么高级用法? 您举的几个例子,确实是MCU外设的一些高端玩法。只是不知道您是否想过,既然这些机制是被 人设计出来的,那它就是种标准用法。从微控制器的发展历程来看,许多硬件机制都是有了实际 需求后才…...

热启动和冷启动是什么,区别
app冷启动: 当应用启动时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用, 这个启动方式就叫做冷启动(后台不存在该应用进程)。冷启动因为系统会重新创建一个新的进程分配给它ÿ…...

每日一题 494目标和(0-1背包)(灵神笔记)
0-1背包模版 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 当前操作?枚举第i个物品选还是不选,不选容量不变,选容量减少 子问题ÿ…...

软件测试工作步骤详情
软件测试步骤按照研发阶段一般分为5个部分:单元测试、集成测试、确认测试、系统测试、验收测试,下面将不同阶段需要的一些工作内容做一下梳理希望可以帮助到大家。 一、单元测试的内容:(白盒为主,黑盒为辅)…...

java项目之列车票务信息管理系统(ssm源码+文档)
项目简介 列车票务信息管理系统实现了以下功能: 管理员:个人中心、用户管理、车票信息管理、购票指南管理、管理员管理、论坛管理、我的收藏管理、系统管理、订单管理。前台首页:首页、车票信息、购票指南、我的收藏管理、论坛信息、我的、…...

【Pytorch笔记】3.数学运算
深度之眼官方账号 - 01-03-mp4-张量操作与线性回归 torch.add() 功能:逐元素计算inputalphaother。 torch.add(input,alpha1,other,outNone)input:tensor; alpha:other的系数,是个实数; other࿱…...

MeterSphere 监控方案
前言:在部署MeterSphere之后,很多时候需要看下MeterSphere服务的监控信息,虽然有监控告警脚本,但还不是太直观,所以就结合 PrometheusExporterGrafana 部署一套完整的MeterSphere监控方案。 首先我们先罗列一下需要监控…...