手机验证码
一 : Controller层的方法
1. @Autoeired 去service的注解
@Autowired private UserService userService;
2. 去登录页面
/** * 去登录页面 * @return */ @RequestMapping("toLogin") public String login(){ return "/login"; }
3. 发送验证码的方法
/** * 发验证码 * @param userPhone * @return */ @RequestMapping("loginSmsCode") @ResponseBody public BaseResponse loginSmsCode(String userPhone){ //调用service发送验证码的方法 return userService.loginSmsCode(userPhone); }
4.登录的方法
/** * 登录的方法 * @param user * @return */ @RequestMapping("login") @ResponseBody public BaseResponse login(@RequestBody User user){ //调用service层 登录的方法 return userService.login(user); }
二 : service层方法
1. @Autoeired 去mapper层的注解
@Autowired private UserMapper userMapper;
2. http注解 用来存做session
@Autowired private HttpServletRequest request;
3.发送验证码的方法
1. 获取redis
2. 存入验证码的key 用手机号拼接, 保证key的唯一性
①: 存入验证码的key 用手机号拼接, 保证key的唯一性
②: 存入时间戳的key 用手机号拼接, 保证key的唯一性
3. 判断有没有这个手机号
4. 调用mapper层发送验证码的方法
5. 判断手机号填写是否正确 (手机号已经有了的情况下,看看用户输入的对不对)
6. 对此次验证码的次数进行判断, 如果时间为空, 则为第一次发送, 不用校验
是不是恶意发送, 如果小于1分钟, 则为1分钟内多次发送, 直接退出
7. 获取上一次发送的时间
8. 判断时间是不是空的
① : 获取当前的时间
② : 当前的时间 - 上一次发送的时间
③ : 判断 毫秒值 是否小于一分钟
9. 获取随机数
10. 调用阿里云工具类,发送验证码
11. 判断验证码是否发送成功
12. 将发送过来的验证码 存到 redis 中 (存进去 用set )
13. 发送成功给出提示
/** * 发送验证码 * @param userPhone * @return */ @Override public BaseResponse loginSmsCode(String userPhone) { //获取redis JedisPool jedisPool = RedisConfig.jedisPool(); Jedis jedis = jedisPool.getResource(); //存入验证码的key 用手机号拼接 ,保证key的唯一性 String SmsCodeKey = "Code"+userPhone; //存入时间戳的key 用手机号拼接 ,保证key的唯一性 String timeKey = "time"+userPhone; //判断有没有这个手机号 if (null == userPhone){ return ResponseUtil.error("手机号不能为空"); } //调用mapper层 发送验证码的方法 User user = userMapper.loginSmsCode(userPhone); //判断手机号是否填写 if (null == user){ return ResponseUtil.error("手机号输入不正确,请重新输入"); } //对此次验证码的次数进行判断, 如果时间为空,则为第一次发送, 不用家宴是否恶意发送 //如果时间小于 1 分钟, 则一分钟之内多次发送, 直接退出 //获取上一次发送的时间 获取是用 get 方法 String s = jedis.get(timeKey); //判断时间不是空的 if (null != s ){ //获取当前时间 long timeMillis = System.currentTimeMillis(); //当前时间 - 上一次发送的时间 Long l = timeMillis-Long.valueOf(s); //判断 if (l<60*1000){ ResponseUtil.error("小于一分钟,请重新发送"); } } //获取随机数 String smsCode = CodeGeneratorUtil.generateSmsCode(); //调用工具类 ,用阿里云发送验证码 String sentSms = SendMsgUtil.sendSms(userPhone,smsCode); //判断验证码是否发送成功 if (!sentSms.equals("OK")){ ResponseUtil.error("验证码发送失败"); } //将验证码存入redis中 并设置过期时间 jedis.setex(SmsCodeKey,60,smsCode); //将验证码发送的时间 存入redis中 jedis.set(timeKey,String.valueOf(System.currentTimeMillis())); //发送成功给出提示 return ResponseUtil.success("验证码发送成功"); }
4.登录的方法
1. 获取redis
2. 对实体类进行判断
3. 对手机号进行判空处理
4. 对验证码判空处理
5. 把redis中存验证码取出来
6. 判断是否频繁发送
7. 调用mapper层登录方法
8. 判断手机号是否存在
9. 关闭资源
10. 存session
11. 登录成功给出提示