java web 项目中实现短信验证码登录,注册
今日在写项目时,注册登录功能沿用了邮箱验证,已经几个项目都使用邮箱验证,感觉有点弱,加上进来几乎所有应用都有短信验证码的功能,感觉需要掌握这个方法
-
选择第三方服务商
应该有很多厂商都提供了短信服务,我使用的是榛子云( 传送门),其他的话流程应该差不多
注册,登录
依次点击应用管理,我的应用,可以查看到AppId,和AppSecret,这两个值在后面会用到 -
导入jar包或maven坐标
这一步直接看官方的文档就行( 传送门) -
实现业务逻辑
如使用项目的界面
在输入手机号,点击发送验证码后将手机号发送给后台处理
@RequestMapping("/sendSms")
public @ResponseBody Map<String,String> sendSms(@RequestBody String phoneNumber, HttpServletRequest request) throws Exception {
Map<String,String> res = new HashMap<String, String>();
//生成随机验证码4位
String captcha = RandomStringUtils.random(4,false,true);
//发送到注册手机
ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com", "105254", "60b64026-9aaa-4459-83f3-0aaad82383d3");
String result = client.send(phoneNumber, "验证码: " + captcha + ",你正在注册喜瑞斯账号,验证码在5分钟内有效");
System.out.println(result);
//验证码存入session
request.getSession().setAttribute("captcha",captcha);
//返回结果
res.put("type","success");
res.put("msg","发送成功");
return res;
}
对ZhenziSmsClient的三个参数简单说明
apiUrl:https://sms_developer.zhenzikj.com //个人用户使用这个url就行
appId:105551 //替换为你的appid
appSecret:60b64026-9aaa-4459-83f3-0aafd81383d3 //替换为你的appSercet
具备基本开发经验的话应该理解这段代码的问题不大
点击后
再点击注册后再将输入的验证码与session域里的验证码比较即可,注意验证成功后将session域里的验证码删除掉
这里需要注意开发者测试的话短信的署名只能是榛子云体验,企业的话可以使用企业的名称
大概三秒左右就能收到短信,速度还可以
- 既然使用了短信验证注册,再登录时也可以选择短信验证登录和传统的账号密码登录
业务逻辑就不在此过多叙述
weixin_51302377: 404了。。
初见1234: 博主的讲解和注释很用心详细,但是在输入测试数据时,当第五个属性为平坦时,会出现空指针异常。原因是在好瓜的前提下,第五个属性为平坦的数据为0,导致其没有put进相应的集合中,所以为null。可以在计算probability那个地方加以判断,若为null相当于×0。个人认为训练数据量比较少的的时候这个问题也暴露了朴素贝叶斯的一些缺陷,虽然朴素贝叶斯对于有缺数据的数据集也有比较好的处理效果。
qq_51250209: 请问能给份源码吗
鲸落%: java: 找不到符号
cyf__wlp: 当然不是了