发送短信验证码+登陆功能

您所在的位置:网站首页 推特无法向手机发验证码 发送短信验证码+登陆功能

发送短信验证码+登陆功能

2023-12-22 20:51| 来源: 网络整理| 查看: 265

       业务:

       手机端点击发送验证码,调用第三方平台(我们用的是“任信了”平台)的接口,去给手机发短信验证码。

  过程:   

                    

       代码:

           

/** * 发送短信验证码 * @param json 前台传入电话号码 * @return 返回发送结果向前台 */ @RequestMapping("/getTestCode") @ResponseBody public GetTestCodeResult sendTestCode(@RequestParam(value="phone",defaultValue="") String phoneNumber ){ GetTestCodeResult result = new GetTestCodeResult(); if(phoneNumber == null || phoneNumber.length()==0 ){ result.setState(Result.ERROR); result.setMessage("手机号为空"); return result; } String code =TestCode.getCode(); if( code== null || code.length()==0){ result.setState(Result.ERROR); result.setMessage("无效的验证码"); return result; } try { SMS.batchsendsm(phoneNumber,code); } catch (Exception e) { result.setState(Result.ERROR); result.setMessage("验证码发送失败"); return result; } TestCodeInforVo testCodeInfor = new TestCodeInforVo(); testCodeInfor.setCode(code); testCodeInfor.setPhone(phoneNumber); testCodeInfor.setDate(System.currentTimeMillis()); testCodeInforMap.put(phoneNumber,testCodeInfor); result.setState(Result.SUCCESS); result.setMessage("验证码发送成功"); result.setData(code); //测试 return result; }

        上面这个是发送验证码的方法,其中包括了2个工具类:

        No.1 生成5位随机数

        

public class TestCode { private final static int codeLength =5; /** * @see 产生随机验证码 * @return 验证码字符串 */ public static String getCode(){ Random rand = new Random(); int a ; String result =""; for( int j =0; j testCodeOutDate ){ result.setState(Result.ERROR); result.setMessage("验证码已过期"); return result; } List users = userService.getUserByPhoneIdentity(phone,identity); if( users.isEmpty()){ result.setState(Result.ERROR); result.setMessage("用户不存在"); return result; } if( users.size() != 1){ result.setState(Result.ERROR); result.setMessage("认证用户不唯一"); return result; } if( users.get(0).getAccountStatus() != null && users.get(0).getAccountStatus().equals("0")){ result.setState(Result.ERROR); result.setMessage("该用户被冻结"); return result; } UserEntity user = users.get(0); user.setQrCode(user.getQrCode()); user.setPersonalPhotos(user.getPersonalPhotos()); user.setIdCardAvatarFace(user.getIdCardAvatarFace()); user.setIdCardNationalEmblem(user.getIdCardNationalEmblem()); String siteID=""; //根据user的role去判断该用户所在的站点ID if (user.getRole()==0) { //0是管理员 //根据用户的ID去站点表里查询站点的最早添加的哪一个站点Id siteID=userService.findSiteIDByTimeAdmin(user.getId()); } if(user.getRole()==2)//2是业主 { //根据用户的ID去站点表里查询站点的最早添加的哪一个站点Id siteID=userService.findSiteIDByTimeOwner(user.getId()); } if (user.getRole()==1) {//1是营业员 //营业员对应的,最早添加的哪一个站点Id siteID=userService.findSiteIDByTimeOwnerSale(user.getId()); } user.setSiteID(siteID); result.setState(Result.SUCCESS); result.setMessage("登录成功"); AppLoginUser appUser=new AppLoginUser(); HttpSession session=request.getSession(); appUser.setUserID(user.getId()); appUser.setUserName(user.getName()); appUser.setUserNum(user.getUserNumber()); OrgStructure org=orgService.getOrgByAccount(user.getName()); //appUser.setOrgId(org.getOrgId()); session.setAttribute("appLoginUser", appUser); result.setData(user); return result; }

        其中:

        1、判断验证码是否正确:(从刚才那个map里面,根据手机号取值)

          

TestCodeInforVo testCodeInfor = (TestCodeInforVo) testCodeInforMap.get(phone);

         从这个实体里面取出验证码和时间。

         2、验证码是否过期:

          过期时间:

          

private final static long testCodeOutDate = 5*60*1000; //验证码过期时间 //验证验证码是否过期 if( System.currentTimeMillis()- testCodeInfor.getDate() > testCodeOutDate ){ result.setState(Result.ERROR); result.setMessage("验证码已过期"); return result; }  

            验证完之后删除他:

         

testCodeInforMap.remove(phone); 

          3、当初想的是存到session里面会怎么写,还没想好,希望路过的大神指导。

 小结:

      发送验证码和登陆的逻辑之前觉得挺复杂的,当画图总结一遍之后,思路就清楚多了,还是要静下心来多总结。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3