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

完工!

引用提供了一个错误信息,即"org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.apple.springboot.demo.mapper.ImageMapper.insertImage"。该错误信息表示无法找到com.apple.springboot.demo.mapper.ImageMapper类的insertImage方法。通过引用的翻译,我们可以将该错误信息翻译为文为"嵌套异常是org.apache.ibatis.binding.BindingException: 无效的绑定语句(未找到):com.apple.springboot.demo.mapper.ImageMapper.insertImage"。从引用的UserMapper.java类的代码可以看出,该类使用了@Mapper注解,并继承了BaseMapper接口,其定义了一个queryByParam方法用于查询用户信息。然而,在错误信息提到的com.apple.springboot.demo.mapper.ImageMapper类的insertImage方法并不存在于该类。因此,我们可以分析出问题所在是在com.apple.springboot.demo.mapper.ImageMapper类找不到insertImage方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):xxx问题](https://blog.csdn.net/lvoelife/article/details/128017529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值