首页 > 其他分享 >Feign远程调用会丢失header信息,如果设置远程调用的header信息

Feign远程调用会丢失header信息,如果设置远程调用的header信息

时间:2023-04-30 13:33:55浏览次数:28  
标签:调用 请求 用户 购物车 header cookie 模块 远程

场景:
订单模块需要查询在购物车模块的商品信息,但是在购物车模块中存在两种购物车,一个是登录的用户的购物车,一个是没有登录的零时用户的购物车,如果用户已经的登录,我们就将用户的信息放入session中,我们通过创建一个拦截器进行判断用户是否进行登录,如果登陆了,就将用户的信息放入ThreadLocal中。
当前,我们需要在订单模块中使用远程调用,调用cart模块的接口,由于我们使用feign,没有进行任何操作的时候,它封装的请求头为空,并且购物车在进行查询的时候使用的是自己模块中ThreadLocal对象中的用户信息,就会产生一个问题:即使在用户登录之后,发送订单请求,在购物车模块任然获取不了用户的信息。
 
 
想要进行解决也是很简单的,就需要将原始的请求中的请求头一同设置到feign构造的新的请求中就好了。
如何进行设置?
通过源码分析:
图一

图二

从图一中可以看出,在构造请求的时候是通过调用Request request = targetRequest(template);这段代码进行创建请求,也就是说,我们可以在该方法中进行自定义我们的请求。
从图二中可以看出,自定义我们的请求只需要创建RequestInterceptor对象,在该对象中的apple方法中进行设置构造请求的参数即可。
 
 
实例:在feign构造的请求中同步原来请求的cookie信息

@Configuration
public class MyFeignConfiguration {
    @Bean
    public RequestInterceptor requestInterceptor(){
        return new RequestInterceptor() {
            /**
             * 向远程调用的新请求中设置cookie
             * @param template 表示feign构造的新请求
             */
            @Override
            public void apply(RequestTemplate template) {
                //我们可以通过RequestContextHolder获取该次请求的请求
                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                //获取请求头
                HttpServletRequest request = attributes.getRequest();
            //    cookie
                String cookie = request.getHeader("Cookie");
                template.header("Cookie",cookie);
            }
        };
    }
}

标签:调用,请求,用户,购物车,header,cookie,模块,远程
From: https://www.cnblogs.com/just1t/p/17365176.html

相关文章

  • 1药网在远程医疗领域走向盈利
    1药网(YI)在中国运营着一个将患者与药品及医疗服务连接起来的数字平台,随着中国已全面解除对疫情的限制,该公司正显示出持续改善的迹象。这也有助于1药网的收入逐年增长,随着互联网医药健康平台在用户中的接受程度越来越高,1药网的收入也将继续改善,并为用户提供更多的便利和更低的健康......
  • git提交本地master分支到远程main分支
    可以使用以下命令将本地master分支提交到远程main分支:首先,需要将本地master分支与远程存储库进行同步。可以使用以下命令将更新的数据从远程存储库拉取到本地:gitfetchorigin切换到本地master分支:gitcheckoutmaster将本地master分支合并到主分支main:gitmergeorigin......
  • git 将代码推送到多个远程仓库
    如果使用Git管理代码(例如使用git命令或GitGUI客户端),可以将代码推送到多个远程仓库,包括Gitee和GitHub。具体做法是:首先在GitHub上创建一个新的空仓库。将GitHub仓库的URL添加为一个新的远程仓库,可以为这个远程仓库指定一个别名如github。例如,如果你的GitHub仓库......
  • git本地master分支推送到远程main分支
    如果你在本地使用的是master分支,而远程仓库使用的是main分支,那么需要进行一些设置才能将本地的master分支推送到远程的main分支。一种简单的方法是,在本地使用gitbranch-m命令将本地的master分支重命名为main分支,然后再将其推送到远程仓库。具体步骤如下:检查本地分......
  • git本地仓库与远程仓库进行关联
    gitremoteaddorigin<远程仓库地址>命令用于将本地仓库与远程仓库进行关联,建立远程仓库的别名为origin。其中<远程仓库地址>是你在GitHub或其他Git仓库网站上创建的仓库的地址。具体操作步骤如下:在GitHub或其他Git仓库网站上创建一个新仓库。在本地仓库目录下使用g......
  • git将远程仓库从本地仓库的关联列表中移除
    如果要将远程仓库从本地仓库的关联列表中移除,可以使用gitremoterm命令,将要移除的远程仓库的别名作为参数传递给该命令,例如:$gitremotermorigin上述命令将从当前Git仓库的关联列表中移除名为origin的远程仓库。注意,使用gitremoterm命令只会将远程仓库的别名从本地仓......
  • git将本地默认分支推送到远程默认分支
    gitpush-uoriginmain命令用于将本地默认分支(这里假设为main)的代码推送到远程仓库中,并将其与远程默认分支关联起来(通常为origin/main)。具体操作步骤如下:在本地仓库中提交你的代码到默认分支main:$gitadd.$gitcommit-m"xxx"将本地默认分支main推送到关联的远程默认......
  • 初始化一个项目,如何通过git上传到远程仓库
    下面是通过git将本地项目上传到远程仓库的步骤:在本地创建一个新的Git仓库,并进行初始化:$gitinit添加所有文件到Git索引中:$gitadd.如果你只想添加单个文件,可以将.替换为文件名。提交所有的改动到本地Git仓库:$gitcommit-m"initialcommit"这里的initialcommit是......
  • linux c/c++程序集成python库,实现调用python函数
    为了提高开发效率,扩展开发程序的功能,我们经常会在我们的linuxc/c++进程里调用外部脚本,例如lua、python,下面,介绍下如何在自己的linuxc/c++代码里调用python脚本里的函数和类,并且将python库集成到我们自己的进程目录里,这样就不依赖系统环境是否存在python及其版本要求。 ......
  • [Linux]raspbian安装xrdp(远程桌面)
    1.首先换源:输入以下命令sudosed-i"s@http://deb.debian.org@https://mirrors.163.com@g"/etc/apt/sources.list2.update是更新软件列表,upgrade是更新软件。这两个命令一般是一起使用的。3.需要在Debian系统中安装xrdp,xrdpisadaemonthatsupportsMicrosoft'sRemoteD......