登录后,实现cookie信息和数据库信息的合并

来源:互联网 发布:haoduofuli新域名 编辑:程序博客网 时间:2024/05/18 00:21



购物车流程图:
逻辑:当用户登录之后,判断cookie中是否有购物车信息,如果有,和用户数据库中的购物车商品完成合并,如果cookie中没有购物车信息直接完成登录。
这里写图片描述

用户发起请求登录,前端控制器UserController调用SSO(单点登录)的一个接口,进行登录验证,成功后返回ticket,不成功返回error状态;登录成功还需发一条消息到(RabbitMQ的交换机),拿到这条消息的应用程序(RabbitMQ)绑定了消息队列,监听消息的应用程序得到这个消息后,做自己的业务逻辑,完成redis和数据库中购物车商品的合并。
发送的消息内容应当包含:1.用户——>> userId
2.redis中购物车信息——>> cookie中key——>>TT_CART

这里写图片描述

要想得到未登录前cookie中的商品信息,需要把用户登录时的cookie信息传递给controller,controller调用service,service,调用SSO登录验证,并把cookie中的key连同userId传递给RabbitMq的消息队列 :this.rabbitTemplate.converAndSend(msg)

更改UserService中的dologin()方法和UserController的dologin()方法,如下
这里写图片描述

UserController.dologin()接受cookie
这里写图片描述

这样就把cookie中key传递到了业务逻辑中。

第二步,在SSO中接收params.put("data",cartKey)data参数,并实现发送消息到RabbitMQ的消息交换机

这里写图片描述

并配置MQ:

这里写图片描述

这样,消息就发送出来了。

第三步,在taotao-cart中监听队列消息并且完成数据的合并
首先来配置rabbitMQ队列的监听:
监听的类:loginCarHandler
监听的队列:taotao-car-login
这里写图片描述

处理逻辑:
这里写图片描述
这里写图片描述
这里写图片描述

完成队列和交换机的绑定
这里写图片描述
这里写图片描述

0 0
原创粉丝点击