Open feign远程调用丢失请求头问题

由浏览器发送后台请求会携带cookie,在后台服务中会通过拦截器拦截到请求,并通过session来获取当前用户是否登录,即便httpsession是springSession实现分布式session共享,它通过对request和response和session的包装类实现了自己的session存储流程,对原有的使用不受影响,把seession存储到redis中,通过浏览器发送请求共享登录数据没有问题,当后端模块依赖其他模块同样方式访问,open feign构建的request是没有提供请求头的信息,也没有携带cookie信息,这导致本来已经登录的用户,去访问其他服务,获取到当前用户登录的购物车,解果是拦截器的prehandler并没有获取到redis中的session,也获取不到当前用户的购物车中的购物项,这是远程调用构造请求时默认不会携带cookie导致。

解决:在feign调用远程服务时,构建了request Template然后会调用拦截器对该模板设置属性,我们自定义指定拦截器让它在远程调用时发生作用,设置上请求头参数。流程如下,第一次请求到静态页面地址时在请求函数中接受浏览器有效的session,他会把session的属性在当前线程环境中继续向下传并在有效的会话间保留到服务,当静态页面获取数据时,当前线程的请求发起远程调用,后端在发起远程feign构建请求后,没有携带当前浏览器端的cookie,通过自定义拦截器设置feign构建的请求头的信息,我们实现拦截器重写apply方法,在当前方法中接收浏览器请求的方法中的httpServletRequest参数,他会在此线程上下文中共享,在拦截器中使用request contextholder.getRequestAttributes()把他转为servletRequestAttributes然后获取到上一步骤的请求对象gitRequest最终获取到完整信息的请求头,Request Context holder实现原理是threadlocal获取到前端的有效请求后,获取cookie把他设置到新的请求中,那么远程调用服务时被他的拦截器拦截验证远程已经登录,返回正确信息。

 

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

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

相关文章

《Git---Windows Powershell提交信息中文乱码解决方案》

解释: Windows PowerShell中的Git乱码通常是因为字符编码不正确或Git配置不支持Windows系统的默认编码导致的。Git在处理文件时可能使用UTF-8编码,而Windows系统的命令行工具(如PowerShell)默认使用的是Windows-1252或GBK编码。 …

mysql 字符串去重

把“aa,bb,cc,dd,aa,bb,cc,dd” 字符串中重复的内容去除。 还是用截取的方式,一个一个截取,然后进行拼接,拼接前用find_in_set函数来判断,是否已经存在? 如果不存在,进行拼接,存在就忽略&#x…

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域,基于注意力的Transformer模型使用的非常广泛,但是在计算机视觉领域,注意力更多是和CNN一起使用,或者是单纯将CNN的卷积替换成注意力,但是整体的CNN 架构没有发生改变VIT说明&#x…

Openstack: live-migration SRIOV的一个问题(1)

​去年分析的一个问题:Openstack: migration 虚拟机热迁移 失败的注意点。里面有很多未知答案的问题。最近再总结一下,可能会有几篇,算是一个系列。 在这两天又遇到,继续看了一下。找到了之前一直没有搞明白的一个问题&#xff1…

Jupyter Notebook 中使用虚拟环境的Python解释器

问题:创建虚拟环境,在pycharm中配置虚拟环境的Python解释器,然后在pycharm中打开ipynb,执行发现缺少包,但是虚拟环境中已经安装了 解决方式: 配置Jupyter Notebook 使用虚拟环境的Python解释器 1&#x…

手写代码题【基础篇】

一.如何实现一个深比较函数 首先,需要明确一点:HTML 是一种用于创建网页的标记语言,它并不适合用来实现复杂的逻辑功能,如深比较函数。深比较函数通常用于比较两个对象的值是否相等,包括它们的属性和嵌套对象。 如果…

JWT是什么?如何使用?

JWT是什么?如何使用? 前言什么是JWT?概念工作方式JWT的组成HeaderPayloadSignatrue 实战引入依赖自定义注解定义实体类定义一个JWT工具类业务校验并生成token定义拦截器配置拦截器定义接口方法并添加注解开始验证 使用场景注意事项 JWT与传统…

用大模型生成带文字的海报

本文代码讲整合在: GitHub - liangwq/Chatglm_lora_multi-gpu: chatglm多gpu用deepspeed和 这篇文章介绍如何利用VLMdiffusion模型来搭建一条文本生成海报的链路。搭建这条链路有两个应用:1.实际的业务中需要批量生产文字图海报可以用,2.可以…

【信息系统项目管理师知识点速记】范围管理:创建WBS

9.6 创建WBS 创建工作分解结构(WBS)是把项目可交付成果和项目工作分解成较小、更易于管理的组件的过程。其主要作用是为所要交付的内容提供架构。这一过程仅在项目的预定义点或仅开展一次。 9.6.1 输入 项目管理计划 范围管理计划:定义了如何根据项目范围说明书创建WBS。项…

C++学习第八课:函数定义使用和它的高级应用

C学习第八课:函数的高级使用 在C中,函数是封装一段代码的单元,使得代码更加模块化、重用性高,并且易于维护。本课我们将介绍如何使用函数组织代码,包括函数原型、定义、调用、参数传递、返回值、默认参数值、递归函数…

生成式人工智能(AIGC)教学解决方案

一、前言 近年来,伴随计算能力跃升和数据量指数级增长,以多模态巨型模型为典型代表的生成式AI技术,在全球范围内引起了广泛关注与热烈追捧。在教育、医疗、法律等众多专业领域,生成式人工智能技术的影响力日益凸显,尤…

基于SSM的美容院管理系统演示。Javaee项目。ssm项目。

演示视频: 基于SSM的美容院管理系统演示。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvcMybatisVueLayuiElem…

C++11 设计模式5. 原型模式

什么是原型模式? 原型模式⼀种创建型设计模式,该模式的核⼼思想是基于现有的对象创建新的对象,⽽不是从头开始创建。在原型模式中,通常有⼀个原型对象,它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状态来…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略,所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到,跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据,服务器端是处理完毕…

opencv基础篇 ——(十)非真实感渲染

非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染&a…

2024最新的,免费的 ChatGPT 网站AI(八个)

ChatGPT是美国人工智能研究实验室OpenAI在2022年11月推出的一款人工智能技术驱动的语言模型应用。它基于GPT-3.5架构(后续还有GPT-4架构的升级版)构建,拥有强大的自然语言处理能力和上下文理解能力,能够参与多轮对话,为…

Python_GUI工具包 PyQt 与 Pyside6的介绍

Python_GUI工具包 PyQt 与 Pyside6的介绍 一、简介 在Python的GUI(图形用户界面)开发领域,PyQt和PySide6是两个非常重要的工具包。它们都基于Qt库,为Python开发者提供了丰富的GUI组件和强大的功能。当然Python也有一些其他的GU…

Halcon 检测物体定位点

文章目录 get_domain 返回所有输入图像的定义域作为一个区域add_channels 给区域增加灰度值find_shape_model 发现匹配模板find_shape_models 发现最佳模板示例 get_domain 返回所有输入图像的定义域作为一个区域 Halcon 中的区域 get_domain(Image : Domain : : ) Image : …

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子,就比如我现在要写文章,文章也许写完正要发布,也可以是还没写完正要存草稿,前端往后端发送数据,如果前端的state不是草稿或者已发布状态&…

[Mac软件]Adobe Photoshop 2024 v25.7 中文激活版

黑果魏叔消息Adobe Photoshop 2024 v25.7是**一款领先的图像编辑软件**,它提供了一系列专业的修饰工具和强大的编辑功能。 首先,作为数字图像处理和编辑的行业标准,Adobe Photoshop被广泛应用于多个领域,从平面设计、摄影后期处理…