①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态

本文详细介绍了JavaWeb中的登录流程,包括发送验证码、用户注册、基于HttpSession的校验以及使用ThreadLocal和JSessionId处理会话状态。还探讨了SpringMVC拦截器在登录拦截中的应用,以及session共享的问题和解决方案。

在这里插入图片描述

个人简介:Java领域优质创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述


实现基于session的登录流程:发送验证码、登录注册、校验登陆状态


🚀流程介绍

登录流程

  • 发送验证码

    • 用户输入手机号,点击发送按钮进行手机号提交,程序会校验手机号是否合法,不合法时要求用户重新输入手机号,合法则在后台生成对应的验证码并保存至session,之后通过短信方式将验证码发送给用户。

      • 什么是HttpSession?

      • HttpSession是Java Web中的一个接口,它提供了一种在服务器端存储和检索用户相关信息的机制。当用户第一次访问Web应用程序时,服务器会为该用户创建一个唯一的session ID,并将该ID存储在一个名为JSESSIONID的cookie中,然后将该ID与一个新的HttpSession对象相关联。在用户与Web应用程序交互期间,可以使用HttpSession对象来存储和检索与该用户相关的信息。当用户关闭浏览器或超过session超时时间时,session对象将被销毁。

        以下是获取和使用HttpSession对象的常用方法:

        1.获取HttpSession对象:

         HttpSession session = request.getSession();
        

        2.向session中存储数据:

         session.setAttribute("key", value);
        

        3.从session中获取数据:

         Object value = session.getAttribute("key");
        

        4.从session中删除数据:

         session.removeAttribute("key");
        

        5.使session失效:

         session.invalidate();
        

  • 注册、登录
    • 用户将手机号、验证码输入,后台从session中获取验证码与用户输入的验证码进行比对校验,如果不一致则无法通过校验,提示用户验证码错误,验证码一致则后台根据手机号查询用户,若用户不存在,则为用户创建账号信息并保存至数据库中,最后无论用户是否存在,都将用户的信息保存至session中,方便后续业务获取当前用户信息。

  • 校验登陆状态

    • 用户在客户端发起请求时,Cookie会携带用户的 JsessionId 后台,后台根据 JsessionId 从session中获取用户信息,如果没有用户信息就表示未登录,会对请求进行拦截,如果有用户信息,将其存入到本地线程 ThreadLocal 中并放行。

      • 为什么使用ThreadLocal:

        • 每个用户其实对应都是去找tomcat线程池中的一个线程来完成工作的, 使用完成后再进行回收,既然每个请求都是独立的,所以在每个用户去访问我们的工程时,我们可以使用threadlocal来做到线程隔离,每个线程操作自己的一份数据。
      • 什么是 JsessionId ?

        • JSessionId是Java Web应用程序中的一个会话标识符,用于跟踪用户与Web应用程序之间的会话。当用户第一次访问Web应用程序时,服务器会为该用户创建一个唯一的JSessionId,并将其存储在cookie中。在随后的请求中,浏览器会将该cookie发送回服务器,以便服务器可以识别用户并维护会话状态。

          在Java Web应用程序中,可以使用HttpSession对象来访问和管理会话状态。




🚀代码实现

业务逻辑实现


  • 统一返回类型 实体类

    • @Data
      @NoArgsConstructor
      @AllArgsConstructor
      public class Result {
             
             
          private Boolean success;
          private String errorMsg;
          private Object data;
          private Long total;
      
          public static Result ok(){
             
             
              return new Result(true, null, null, null);
          }
          public static Result ok(Object data){
             
             
              return new Result(true, null, data, null);
          }
          public static Result ok(List<?> data, Long total){
             
             
              return new Result(true, null, data, total);
          }
          
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.29.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值