1.课程介绍:
2.数据库:
3.项目架构:
MySQL数据库,版本8.0
导入sql文件即可:
将项目文件放到idea目录下:
加入SpringBoot启动器:
启动项目:
访问目录:
http://localhost:8081/shop-type/list
结果如下,将数据库里的值取出:
在改目录下,进入终端:输入命令:
start nginx.exe
访问目录:
http://localhost:8080/
思路如下:
TODO 发送短信验证码并保存验证码
return userService.sendCode(phone,session);
IUserService:
public interface IUserService extends IService {Result sendCode(String phone, HttpSession session);
}
UserServiceImpl:
校验手机号:
if (RegexUtils.isPhoneInvalid(phone)){//2.如果不符合,返回错误信息return Result.fail("手机号格式错误");
}
符合,生成验证码
String code =RandomUtil.randomNumbers(6);
保存验证码到session
session.setAttribute("code",code);
因为目前在测试阶段,没有申请阿里云的短信服务,故用日志替代:
发送验证码
log.debug("发送验证码成功,验证码{{}}",code);
测试:
查看日志:
短信验证码登录思路:
登录功能:登录参数,包含手机号、验证码;或者手机号、密码
TODO 实现登录功能:
return userService.login(loginForm,session);
login登录功能:
Result login(LoginFormDTO loginForm, HttpSession session);
UserServiceImpl:
校验手机号:
String phone = loginForm.getPhone();
if (RegexUtils.isPhoneInvalid(phone)){//2.如果不符合,返回错误信息return Result.fail("手机号格式错误");
}
效验验证码:
Object cacheCode=session.getAttribute("code");
String code = loginForm.getCode();if (cacheCode == null || !cacheCode.toString().equals(code)){//3.不一致,报错return Result.fail("验证码错误");}
一致根据手机号查询用户:
User user =query().eq("phone",phone).one();
判断用户是否存在
if (user == null){//6.不存在,创建新用户并且保存user = createWithPhone(phone);
}
保存用户信息到session中
session.setAttribute("user",user);
返回Result.ok()
return Result.ok();
createWithPhone,功能为:创建新用户
创建也会有:给一个随机的用户名:
User user = new User();
user.setPhone(phone);
user.setNickName("user_"+RandomUtil.randomNumbers(10));
保存用户:
save(user);
return user;
重新启动项目,填入手机号和验证码进行测试,测试结果如下:
填入一个错误的验证码:
填入正确的验证码:
进入数据库查看:
思路:使用拦截器
新建立:Loginlnterceptor
1.获取session
HttpSession session = request.getSession();
2.获取session中的用户
Object user = session.getAttribute("user");
3.判断用户是否存在
if(user == null){//4.不存在,拦截,返回401代码response.setStatus(401);return false;
}
5.存在,保存用户信息到ThreadLocal
UserHolder.saveUser((User) user);
6.放行
return true;
7.移出
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserHolder.removeUser();
}
编写MvcConfig:
配置过滤器:
@Override
public void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(new Loginlnterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/user/code","/blog/hot","/user/login");
}
重新启动:效果如下