目录
1 . 导入项目 :
先导入sql文件 :

导入后端项目 :

注意要修改一些地方 :
1 . mysql配置,要改成自己的 :
如果用的是8.x版本,需要在pom文件中修改依赖 :

2 . 修改redis的url,为自己虚拟机redis开放端口 :

3 . 直接启动项目之后,访问http://localhost:8081/shop-type/list

4 . 将前端搭建好之后,访问8080,用手机模式打开 :

2 . 基于Session实现短信验证登录
2 . 1 原理 :

发送验证码:
用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号
如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户
短信验证码登录、注册:
用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息
校验登录状态:
用户在请求时候,会从cookie中携带者JsessionId到后台,后台通过JsessionId从session中拿到用户信息,如果没有session信息,则进行拦截,如果有session信息,则将用户信息保存到threadLocal中,并且放行 ;
2 . 2 发送短信验证码 :
@Override
public Result sendCode(String phone, HttpSession session) {
// 1 . 检验啊手机号
if(RegexUtils.isPhoneInvalid(phone)){
// 2 . 如果不符合 , 报错
return Result.fail("手机号格式错误!") ;
}
// 3 . 符合 , 生成验证码
String code = RandomUtil.randomNumbers(6) ; //生成长度为6位的随机验证码
// 4 . 保存验证码到 session
session.setAttribute("code",code);
// 5 . 发送验证码
log.debug("验证码方程成功,验证码 : {}",code);
return Result.ok();
}
关于如何校验,参考 : java实现手机号,密码,游邮箱 , 验证码的正则匹配工具类-CSDN博客
这里的发送验证码功能没有实现,只是做了个假的,日后有时间再完成 ;
启动项目,在前端点击发送验证码 :

2 . 3 短信验证码登录和验证功能 :
/**
* 用户登录
* @param loginForm
* @param session
* @return
*/
@Override
public Result login(LoginFormDTO loginForm, HttpSession session) {
// 1 . 校验手机号
String phone = loginForm.getPhone() ; // 获取手机号码
if (RegexUtils.isPhoneInvalid(phone)){
// 2 . 不符合 , 返回错误信息
return Result.fail("手机号格式错误") ;
}
// 3 . 校验验证码
Object cacheCode = session.getAttribute("code") ;
String code = loginForm.getCode() ;
if(cacheCode == null || !cacheCode.toString().equals(code)){
// 3 . 1 不一致,直接报错返回
return Result.fail("验证码错误") ;
}
// 4 . 一致, 根据手机号查询用户
User user = query().eq("phone",phone).one() ;
// 5 . 判断用户是否存在
if(user == null){
// 6 . 为空,表示之前未创建 , 则创建
user = createUserWithPhone(phone) ;
}
// 7 . 保存用户信息到session中
session.setAttribute("user",user);
return Result.ok() ;
}
private User createUserWithPhone(String phone) {
// 1. 新建用户
User user = new User() ;
user.setPhone(phone) ;
user.setNickName(USER_NICK_NAME_PREFIX + RandomUtil.randomString(10)) ;
// 2 . 保存用户
save(user) ;
return user ;
}
2 . 4 登录验证功能

先定义一个拦截器 :
/**
* 拦截器
*/
public class Login

8834

被折叠的 条评论
为什么被折叠?



