【SpringBoot】DEMO:实战②.⑤——登录注册功能实现,并加入Session和Cookie
SpringBoot学习视频
最近看的小匠SpringBoot的教学视频,看了20多章的网课,跟着老师跑,感觉比较迷,希望巩固知识
小匠视频链接: https://www.bilibili.com/video/av65117012
-
今天刚刚复习了session和cookie,对上一篇博客:【SpringBoot】DEMO:实战②——登录注册功能实现 进行修改,加入session和cookie
-
根据我的上一篇博客进行修改,请根据 【SpringBoot】DEMO:实战②——登录注册功能实现结合观看
-
什么是cookie和session呢
1、在注册时做好准备:为每个用户生成随机数
-
在注册的时候,除了存入 账号 和 密码,还需要使用 UUID.randomUUID().toString() 方法为每一个用户生成随机数token
-
在regiestController中:
@PostMapping("/regiest")
public String regiest_show(
@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestParam("btn_regiest") String btn_regiest,
Model model
) {
//把前端的username和password写入user对象,方便后续操作
User user = new User();
user.setUsername(username);
user.setPassword(password);
!____________________________________________________________________!
//使用UUID,生成唯一的随机数,写入数据库,作为唯一标识码
String token = UUID.randomUUID().toString();
user.setToken(token);
!____________________________________________________________________!
if(username == null || username == "" || password == "" || password == null ){
//注册失败,出错提示
model.addAttribute("btn_regiest",btn_regiest);
return "error";
}else{
//注册成功
//使用findByUsername()方法,判断userCheck是否为空(在数据库中是否存在)
User userCheck = userMapper.findByUsername(username);
if (userCheck == null) {
//账号还不存在数据库,执行插入操作,注册成功,返回ok_regiest页面
userMapper.add(user);
model.addAttribute("regiest_username", username);
model.addAttribute("regiest_password", password);
return "ok_regiest";
} else {
int CunZai = 1;
//账号存在,返回error页面
model.addAttribute("regiest_username", username);
model.addAttribute("CunZai",CunZai);
return "error";
}
}
}
- 数据库展示:
2、在登录入写入cookie
- 登录成功之后,通过 用户名 查询其唯一的随机码token
- 在login()方法中添加 HttpServletResponse response 参数,用于添加cookie
- 使用response.addCookie(new Cookie(“token”,token)),自定义cookie,名字为:token,value为 token的随机数
具体代码如下:
- 在loginController中:
@PostMapping("/login")
//获取三个参数,账号,密码,按钮是否被点击
public String login(@Param("username") String username,
@Param("password") String password,
!____________________________________________________________________!
HttpServletResponse response,
!____________________________________________________________________!
Model model) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
//使用findByUsername_login()方法,对数据库进行检查,判断账号密码是否正确
User check_login = userMapper.findByUsername_login(username,password);
//正确,返回index页面,错误,返回error页面,写cookie和session
if(check_login != null){
model.addAttribute("success_login_username",username);
//创建userList对象去承接service层的getUserList()方法中return的数据,装进model
List<User> userList = userlist.getUserList();
model.addAttribute("userList", userList);
!____________________________________________________________________!
//查询数据库中username对应的唯一token,
User user_token = userMapper.username_to_setToken(username);
String token = user_token.getToken();
!____________________________________________________________________!
if(user != null){
!____________________________________________________________________!
//自定义cokie,名字为:token,value为 token的随机数
response.addCookie(new Cookie("token",token));
!____________________________________________________________________!
return "redirect:/";
}else{
return "redirect:/";
}
}else{
return "error";
}
}
效果展示:
3、登录成功,进入主页,取cookie验证,写session
-
当登录成功进入主页,获取Cookie中名为 token 的信息
-
把名为 token 的信息放入数据库进行查询,若存在,写入session,即可保持登录态
-
在 2、在登录入写入cookie 中使用了 :HttpServletResponse 写入cookie,现在我们需要去cookie,要使用 HttpServletRequest 请求Cookie中的值进行查询
代码展示:
- 在indexController中:
@GetMapping("/")
public String index(
!_____________________________________________!
HttpServletRequest request)
!_____________________________________________!
{
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName().equals("token")){
String token = cookie.getValue();
User user = userMapper.findByToken(token);
if (user != null){
//查询到token中的value值存在,写入session,保持登录态
request.getSession().setAttribute("user",user);
}
break;
}
}
return "index";
}
完工!