【SpringBoot】DEMO:实战②.⑤——登录注册功能实现,并加入Session

SpringBoot学习视频
最近看的小匠SpringBoot的教学视频,看了20多章的网课,跟着老师跑,感觉比较迷,希望巩固知识

小匠视频链接: https://www.bilibili.com/video/av65117012

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";
    }

完工!

发布了28 篇原创文章 · 获赞 4 · 访问量 1328

猜你喜欢

转载自blog.csdn.net/weixin_44100826/article/details/103245792
今日推荐