分布式微服务项目,同一个controller方法间的转发导致cookie丢失,报错null pointer异常

源码:

复制代码
/**
 *添加商品进入购物车
 */
@GetMapping("/addToCart")
public String addToCart(@RequestParam("num") Integer num, @RequestParam("skuId") Long skuId, RedirectAttributes redirectAttributes) {
    System.out.println("num=" + num+",skuId="+skuId);
    CartItemVo cartItemVo = cartService.addToCart(num,skuId);
    redirectAttributes.addAttribute("skuId",skuId);
    redirectAttributes.addAttribute("num", num);
    return "redirect:/addToCartSuccess.html";
}

@GetMapping("/addToCartSuccess.html")
public String addToCartPage(@RequestParam("num") Integer num, @RequestParam("skuId") Long skuId, Model model) {
    CartItemVo cartItemVo =  cartService.getCartItem(skuId);
    cartItemVo.setCount(num);
    model.addAttribute("item",cartItemVo);
    return "success";
}

错误原因:

本服务为购物车服务,域名为cart.jxxdymall.com,由于第一个请求来自另一个域名为item.jxxdymall.com的服务,而cookie的作用域被我设置为了jxxdymall.com,在方法间进行转发的时候,转发之前的路径是http://item.jxxdymall.com/4.html,转发之后变为http://192.168.56.1:15002/addToCartSuccess.html?skuId=4\&num=1,导致了cookie丢失

解决办法:

重定向时使用完整路径

复制代码
        /**
     *添加商品进入购物车
     */
    @GetMapping("/addToCart")
    public String addToCart(@RequestParam("num") Integer num, @RequestParam("skuId") Long skuId, RedirectAttributes redirectAttributes) {
        System.out.println("num=" + num+",skuId="+skuId);
        CartItemVo cartItemVo = cartService.addToCart(num,skuId);
        redirectAttributes.addAttribute("skuId",skuId);
        redirectAttributes.addAttribute("num", num);
        return "redirect:http://cart.jxxdymall.com/addToCartSuccess.html";
    }
相关推荐
想用offer打牌5 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
狮恒6 小时前
OpenHarmony Flutter 分布式数据管理:跨设备数据同步与一致性保障方案
分布式·flutter·wpf·openharmony
嗝o゚6 小时前
鱼与熊掌可兼得?用Flutter+鸿蒙的混合架构破解性能与UI的世纪难题
flutter·架构·harmonyos
小小测试开发6 小时前
提升App UI自动化性能与效率:从脚本到架构的全链路优化指南
ui·架构·自动化
中冕—霍格沃兹软件开发测试7 小时前
探索性测试:思维驱动下的高效缺陷狩猎
人工智能·科技·开源·appium·bug
黄俊懿7 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——@GlobalTransactional注解与@globalLock生效的原理
java·spring cloud·微服务·云原生·架构·系统架构·架构师
黄俊懿8 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——开启全局事务
java·数据库·spring·spring cloud·微服务·架构·架构师
ZePingPingZe9 小时前
浅谈接口幂等性、MQ消费幂等性
分布式·java-rocketmq
Wang's Blog9 小时前
RabbitMQ: 高并发外卖系统的微服务架构设计与工程实现
分布式·微服务·rabbitmq
宇擎智脑科技9 小时前
Flutter 对接高德地图 SDK 适配鸿蒙踩坑记录与通信架构解析
flutter·架构·harmonyos