openFeign拦截器(微服务调用feign接口会造成请求头缺失望周知)

在学习商品甄选项目的时候,当时我的解决方案是在登录的时候存入用户数据

由于懒得看视频 最后才发现 文档最后才给了这个解决方案。。。。

 问题说明

在测试的时候,那么service-cart微服务会报错,如下所示:

java.lang.NullPointerException: Cannot invoke "com.atguigu.spzx.model.entity.user.UserInfo.getId()" because the return value of "com.atguigu.spzx.common.util.AuthContextUtil.getUserInfo()" is nullat com.atguigu.spzx.cart.service.impl.CartServiceImpl.getAllCkecked(CartServiceImpl.java:147)

针对service-cart微服务是获取不到当前登录用户的信息。

原因:service-order微服务调用service-cart微服务的时候,是通过openFeign进行调用,openFeign在调用的时候会丢失请求头

1.6.2 问题解决

解决方案:使用feign拦截器拦截请求,获取token,重新传递token

注意:为了让feign拦截器更加通用,那么此时可以将拦截器定义到common-service模块中

feign拦截器开发:

  • 1、在common-service模块中加入openFeign的依赖

<!-- openfeign依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><scope>provided</scope>
</dependency>
  • 2、定义feign拦截器

// com.atguigu.spzx.common.feign;
public class UserTokenFeignInterceptor implements RequestInterceptor {
​@Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String token = request.getHeader("token");requestTemplate.header("token" , token) ;}
​
}
  • 3、定义使用该拦截器的注解

// com.atguigu.spzx.common.anno;
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@Import(value = UserTokenFeignInterceptor.class)
public @interface EnableUserTokenFeignInterceptor {}
  • 4、service-order微服务启动类上使用@EnableUserTokenFeignInterceptor注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川易点慧电子商务抖音小店:安全正规,购物新选择

在当今互联网高速发展的时代&#xff0c;电子商务已经成为人们日常购物的重要组成部分。四川易点慧电子商务抖音小店作为新兴的电商平台&#xff0c;凭借其安全正规的经营理念和便捷高效的购物体验&#xff0c;正逐渐赢得消费者的信赖和喜爱。 一、平台背景实力雄厚 四川易点慧…

百钱买百鸡

百钱买百鸡问题可以使用穷举法解决。我们可以使用三重循环来遍历所有可能的公鸡、母鸡和小鸡的数量&#xff0c;然后判断是否满足题目条件&#xff0c;即总花费不超过100元&#xff0c;并且买到100只鸡。&#xff08;公鸡5元一只&#xff0c;母鸡3元一只&#xff0c;小鸡一元三…

Windows11+Ubuntu20.04系统重装(升级为Ubuntu22.04)

事情起因是标题所对应的双系统中&#xff0c;Ubuntu老自动断电关机&#xff0c;一开始是跑大型程序才会关机&#xff0c;这两天愈演愈烈变成运行一个远程控制或者VSCode就会关机。一怒之下找了Dell在线客服&#xff0c;在对方引导下检测了硬件系统&#xff0c;发现没有明显故障…

Java可变参数和不可变参数

可变参数 Java可变参数允许在方法中传递不定数量的参数。 可变参数是Java 5引入的一项功能&#xff0c;它极大地提高了代码的灵活性和易用性。使用可变参数时&#xff0c;你可以在调用方法时传递任意数量的参数&#xff0c;而这些参数在方法内部被当作数组处理。这意味着你可…

A29 STM32_HAL库函数 之 IWDG通用驱动 所有函数的介绍及使用

A29 STM32_HAL库函数 之 IWDG通用驱动 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_IWDG_Init1.2 HAL_IWDG_Refresh 该文档修改记录&#xff1a;总结 1 该驱动函数预览 序号函数名描述1HAL_IWDG_Init()初始化独立看门狗(IWDG)。2HAL_IWDG_Refresh()刷新独立看门狗(IWDG)的计…

STM32单片机C语言模块化编程实战:按键控制LED灯详解与示例

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 之前介绍了很多关于点灯的方法&#xff0c;比如…

4.20 IO流

IO流结构 InputStream&#xff08;字节输入流&#xff09; public static void main(String[] args) {// byteInputStream();// byteInputStream1();// byteInputStream2();byteInputStream3();}// 使用字节流时对于中文汉字基本都会出现乱码问题&#xff0c;因此对中文乱码问…

mininet+odl安装

安装环境 ubuntu-18.04.2-desktop-amd64 Java version: 1.8.0_362 Apache Maven 3.6.0 opendaylight: distribution-karaf-0.6.0-Carbon(csdn中应该是已有资源&#xff0c;不让上传) opendaylight的官网下载链接一直打开失败&#xff0c;我使用的是别人的Carbon版本。 在安…

Java中的StringBuilder类

StringBuilder 是 Java 中的一个类&#xff0c;它用于可变字符串的构造或修改。当你需要在一个循环中多次修改一个字符串时&#xff0c;使用 StringBuilder 是非常有用的&#xff0c;因为它比使用 操作符连接字符串的效率要高得多。 StringBuilder 的主要特点如下&#xff1a…

yml文件解析

.yml 后缀的文件可以有多个application.yml # 项目相关配置 用于 RuoYiConfig.java ruoyi:# 名称name: RuoYi# 版本version: 3.8.5# 版权年份copyrightYear: 2023# 实例演示开关demoEnabled: true# 文件路径 示例&#xff08; Windows配置D:/ruoyi/uploadPath&#xff0c;Lin…

C语言结构体,枚举,联合

系列文章目录 第一章 C语言基础知识 第二章 C语言控制语句 第三章 C语言函数详解 第四章 C语言数组详解 第五章 C语言操作符详解 第六章 C语言指针详解 第七章 C语言结构体详解 第八章 详解数据在内存中的存储 第九章 C语言指针进阶 文章目录 1. 结构体 1.1 声明结构…

Ajax 笔记 01

01 ajax的基本使用 ajax五步骤: 1.构建异步请求对象 2.调用open方法 传入请求方式 服务器地址等参数 3.调用send方法 发起网络请求 4.注册请求对象的状态改变事件 5.在状态改变事件里面 判断当前状态 并取得返回值 02 get方式向服务器发送数据 ajax的get方式向服务器提交数据: …

kubebuilder(2)创建项目及初始化

一个demo项目来了解kubebuilder的项目结构 初始化项目 mkdir demo-operator cd demo-operator kubebuilder init --domain demo.com --repo demo.com/tutorial 这一步创建了 Go module 工程基本的模板文件&#xff0c;引入了必要的依赖 如果不用--repo参数&#xff0c;也可…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Push Button的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Push Button的使用及说明 文章编号&#x…

mysql基础12——事务

事务 &#xff01;&#xff01;&#xff01;确保多个关联操作全部执行 需要用到事务 事务是mysql的一项功能 使一组数据操作(DML操作) 要么全部执行 要么全部不执行&#xff08;原子操作&#xff09; 不会因为某种异常情况&#xff08;停电&#xff0c;网络中断&#xff0…

mysql基础6——多表查询

外键 把分散在多个不同表里面的数据查询出来的操作&#xff0c;就是多表查询 把两个表连接&#xff1a;使用外键(foreign key)和连接(join) 外键在表创建的阶段定义也可以通过修改表定义&#xff0c;连接在查询字段把相同意义的字段连接起来 外键就是从表中用来引用主表中数…

C# 开源SDK 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备&#xff0c;初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库&#xff0c;含海康、大恒品牌2D相机的常用功能。 底层采用回…

pprof火焰图排查问题小计

问题描述 前情提要&#xff1a;一个go服务使用了公司内部的流式框架&#xff0c;将业务拆分成算子&#xff0c;算子间通过Input和output进行参数传递 线上一个go模块会有偶现的非预期错误&#xff0c;通过日志发现是出现了算子入参的丢失&#xff0c;首先怀疑是不是自己的框架…

ai扩写软件有哪些免费的?分享4款扩写好用的!

随着人工智能技术的飞速发展&#xff0c;AI扩写软件逐渐成为了内容创作者们的得力助手。它们能够迅速将简短的文案扩写成内容丰富、结构完整的文章&#xff0c;大大提高了创作效率。本文将为您盘点几款免费的AI扩写软件&#xff0c;助您在今日头条、百家号等自媒体平台上轻松打…

合并二叉树(力扣617)

解题思路&#xff1a;实现两个二叉树同时递归遍历&#xff0c;遇到一方为空时就把另一方不为空的相同位置返回&#xff0c;所以这里特殊的是停止递归条件隐藏在上面&#xff0c;如果返回的是空值时自然不法继续进行&#xff08;前提条件&#xff0c;前序遍历和在第一个二叉树上…