首页 > 其他分享 >【项目学习】谷粒商城学习记录8 - 购物车

【项目学习】谷粒商城学习记录8 - 购物车

时间:2023-12-19 21:44:06浏览次数:36  
标签:request userInfoTo param 购物车 学习 cookie 谷粒 response 页面

【项目学习】谷粒商城学习记录8 - 购物车

本节起将不对一些重复细节进行详细说明


一、环境搭建 & 准备工作

1.1. 创建新模块

  • 注意java版本信息后面在pom.xml文件里修改

  • 导入公共模块依赖
  • 写配置信息
  • 启动类加上注册发现和Feign功能
  • 修改网关
    - id: gulimall_cart_route
      uri: lb://gulimall-cart
      predicates:
      	- Host=cart.gulimall.cn
    

1.2. 静态页面搭建

  • 设置域名
  • 将注册页面和登录页面放在服务资源目录下
  • 登录、注册页面动静分离,将静态资源移到nginx下
  • 修改页面内的路径
  • 测试:

1.3. 数据存储结构:

1.4. 完善页面细节,实现页面跳转

二、ThreadLocal 用户身份鉴别

  • 创建service.CartService和impl.CartServiceImpl

  • 创建拦截器interceptor.CartInterceptor

  • 实现拦截器在业务执行前的功能:

    public class CartInterceptor implements HandlerInterceptor {
      public static ThreadLocal<UserInfoTo> threadLocal = new ThreadLocal<>();
    
      /**
       * 目标方法执行之前
       * @param request
       * @param response
       * @param handler
       * @return
       * @throws Exception
       */
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
          UserInfoTo userInfoTo = new UserInfoTo();
    
          HttpSession session = request.getSession();
          MemberRespVo member = (MemberRespVo) session.getAttribute(AuthServerConstant.LOGIN_USER);
          if(member != null) {
              //用户登录了
              userInfoTo.setUserId(member.getId());
          }
    
          Cookie[] cookies = request.getCookies();
          if(cookies != null && cookies.length > 0) {
              for (Cookie cookie : cookies) {
                  //user-key
                  String name = cookie.getName();
                  if(name.equals(CartConstant.TEMP_USER_COOKIE_NAME)) {
                      userInfoTo.setUserKey(cookie.getValue());
                      userInfoTo.setTempUser(true);
                  }
              }
          }
    
          //如果没有临时用户一定分配一个临时用户
          if(StringUtils.isEmpty(userInfoTo.getUserKey())) {
              String uuid = UUID.randomUUID().toString();
              userInfoTo.setUserKey(uuid);
          }
          //目标方法执行之前
          threadLocal.set(userInfoTo);
          return true;
      }
    }
    
  • ThreadLocal能够在整个线程内共享数据

  • 测试:

  • 实现拦截器在业务处理后的功能

    /**
     * 业务执行之后,分配临时用户,让浏览器保存
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        UserInfoTo userInfoTo = threadLocal.get();
        if(!userInfoTo.isTempUser()) {
            Cookie cookie = new Cookie(CartConstant.TEMP_USER_COOKIE_NAME, userInfoTo.getUserKey());
            cookie.setDomain("gulimall.com");
            cookie.setMaxAge(CartConstant.TEMP_USER_COOKIE_TIMEOUT);
            response.addCookie(cookie);
        }
    }
    
  • 测试:

标签:request,userInfoTo,param,购物车,学习,cookie,谷粒,response,页面
From: https://www.cnblogs.com/A-sc/p/17914570.html

相关文章

  • 算法学习笔记(8.3): 网络最大流 - 模型篇
    本文慢慢整理部分模型。DAG最小路径覆盖经典的题目,经典的思想。网络流常见的将图上的点拆为入点和出点,那么路径由若干出-入-出-入的循环构成。于是在拆好的图上流一流即可。[CTSC2008]祭祀典中祭黑白染色利用黑白染色将整个图变成一个二分图是网络流常见的套路,......
  • uniGUI学习之禁用缓存(75)
    引用了第三方js,css等文件,但是因为缓存的原因,修改后没有及时生效。方法一:在ServerModule的OnHTTPCommand事件中,加入以下代码AResponseInfo.CacheControl:='max-age=0,no-cache,no-store,must-revalidate,proxy-revalidate';但是此方法有缺点,只支持exe模式,exe模式下所有......
  • uniGUI学习之自定义Hint(74)
    默认Hint样式 procedureTMainForm.UniFormShow(Sender:TObject);vari:Integer;beginfori:=0toSelf.ControlCount-1dobeginwithTUniFormControl(Self.Controls[i])dobeginifHint<>''thenbeginSh......
  • Linux 学习笔记
    文件及权限与用户相关的文件linux下一切皆文件:一切设备抽象的进程,运行数据甚至CPU等都可以在文件系统中找到相关的文件/etc/passwd/etc/groupect:全局配置文件夹其他命令:usermod、userdel、id目录创建:mkdir文件名目录空白文件创建:touch文件名浏览文件文件系统:树形结构......
  • 3-5年Android程序员的学习计划和职业规划
    前言对于已经在职场中摸爬滚打了3-5年的程序员来说,已经具备了一定的工作经验,掌握了一些专业知识,对于工作中的各种问题和挑战已经有了一定的解决方案。但是,随着科技的不断进步,行业竞争的不断加剧,不能一味地依靠过去的经验和知识,更要时刻保持学习的心态,持续学习新技术,积累新经验,以便......
  • opencv图像处理机器学习真实项目教程(python实现)1计算机视觉简介
    1计算机视觉简介欢迎来到计算机视觉的世界。本书将带您踏上令人兴奋且快速发展的计算机视觉和图像处理世界的旅程。本书首先介绍计算机视觉和OpenCV库。然后,我们将继续介绍本课程的基本库和所需的环境设置。主要内容:计算机视觉简介计算机视觉的应用PythonOpenCVOpenCV......
  • Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十一章、AOP11.1为什么要使用AOP问题现有业务层开发存在问题额外功能代码存在大量冗余每个方法都需要书写一遍额外功能代码不利于项目维护Spring中的AOPAOP:Aspect切面+Oriented面向Programmaing......
  • 突发奇想入一下机器学习的坑,STEP 1,想卒
    检索机器学习入门,书籍推荐《统计学习方法》李航著《机器学习》西瓜书周志华著《ElementsofStatisticalLearning》(ESL),《MachineLearning:AProbabilisticPerspective》(MLAPP)这两本书可以是被奉为机器学习圣经的两本书,绝大多数的人都会推荐,但是实际上这本书对于新手......
  • 圆方树学习笔记
    今天在做ABC318G这道题,要用到圆方树的知识,于是就去学了圆方树。学习圆方树首先需要学习点双连通分量以及缩点,此处不多赘述。圆方树中分两种类型的点:圆点和方点。圆点指的是原来的无向图中的所有点,而方点指的是每一个点双连通分量所代表的点。相当于每一个点双连通分量就是一个......
  • 状压 DP 学习笔记
    前言2023.8.30开始停课集训。开始补\(CSP-S\)的知识点,先打算来学状压\(DP\)。定义状压\(DP\)的全称是状态压缩动态规划,也是动态规划中的一种。但是其与普通\(DP\)不同的是它将某种状态(一般为二进制\(01\)串,\(1\)表示选,\(0\)表示不选。也有其它进制)作为了\(dp\)......