返回顶部
首页 > 资讯 > 精选 >如何使用Feign传递请求头信息
  • 138
分享到

如何使用Feign传递请求头信息

2023-06-29 10:06:55 138人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关如何使用Feign传递请求头信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Feign传递请求头信息在我之前的文章服务网关spring cloud Zuul中,将用户的登录i

这篇文章将为大家详细讲解有关如何使用Feign传递请求头信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    Feign传递请求头信息

    在我之前的文章服务网关spring cloud Zuul中,将用户的登录id放在了请求头中传递给内部服务。

    但是当内部服务之间存在feign调用时,那么请求头信息会在feign请求的时候传递吗?不会,请求的头信息和请求参数都不会进行传递。

    但是我们可以通过通过实现RequestInterceptor接口,完成对所有的Feign请求,传递请求头和请求参数。

    实现RequestInterceptor接口

    import feign.RequestInterceptor;import feign.RequestTemplate;import org.springframework.WEB.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.Http.httpservletRequest;import java.util.Enumeration;public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {  @Override  public void apply(RequestTemplate requestTemplate) {    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder            .getRequestAttributes();    HttpServletRequest request = attributes.getRequest();    Enumeration<String> headerNames = request.getHeaderNames();    if (headerNames != null) {      while (headerNames.hasMoreElements()) {        String name = headerNames.nextElement();        String values = request.getHeader(name);        requestTemplate.header(name, values);      }    }  }}

    这里只设置了请求头,如果想传递请求参数,可以参考如下代码:

    public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {  @Override  public void apply(RequestTemplate requestTemplate) {    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder            .getRequestAttributes();    HttpServletRequest request = attributes.getRequest();    Enumeration<String> headerNames = request.getHeaderNames();    if (headerNames != null) {      while (headerNames.hasMoreElements()) {        String name = headerNames.nextElement();        String values = request.getHeader(name);        requestTemplate.header(name, values);      }    }    Enumeration<String> bodyNames = request.getParameterNames();      StringBuffer body =new StringBuffer();      if (bodyNames != null) {          while (bodyNames.hasMoreElements()) {            String name = bodyNames.nextElement();            String values = request.getParameter(name);            body.append(name).append("=").append(values).append("&");          }      }     if(body.length()!=0) {        body.deleteCharAt(body.length()-1);        template.body(body.toString());        logger.info("feign interceptor body:{}",body.toString());    }  }}

    注册配置

    package com.southGIS.ibase.personalConfigure.config;import com.southgis.ibase.utils.FeignBasicAuthRequestInterceptor;import com.southgis.ibase.utils.FeignSpringFORMEncoder;import feign.RequestInterceptor;import feign.codec.Encoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class FeignSupportConfig {    @Bean  public RequestInterceptor requestInterceptor(){    return new FeignBasicAuthRequestInterceptor();  }}

    这个文件放在项目的扫描目录下,所有的feign调用都会使用此配置。如果只有某个feign调用则可以这样设置(但配置类不能在扫描目录下):

    @FeignClient(name = "organ",path = "/organ/OrganInfo",configuration = FeignSupportConfig.class)

    Feign调用微服务传递header请求头

    package com.chitic.module.core.config;import feign.RequestInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.util.Enumeration; @Configurationpublic class FeignConfig {    @Bean    public RequestInterceptor headerInterceptor() {        return template -> {            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();            if (null != attributes) {                HttpServletRequest request = attributes.getRequest();                Enumeration<String> headerNames = request.getHeaderNames();                if (headerNames != null) {                    while (headerNames.hasMoreElements()) {                        String name = headerNames.nextElement();                        String values = request.getHeader(name);                        template.header(name, values);                    }                }            }        };    }}

    需注意,feign调用时不能调用含有HttpServletResponse参数(比如常用的数据导出),以下就不能远程调用,目前没找到解决办法

    如何使用Feign传递请求头信息

    关于“如何使用Feign传递请求头信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    --结束END--

    本文标题: 如何使用Feign传递请求头信息

    本文链接: https://lsjlt.com/news/324144.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 如何使用Feign传递请求头信息
      这篇文章将为大家详细讲解有关如何使用Feign传递请求头信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Feign传递请求头信息在我之前的文章服务网关Spring Cloud Zuul中,将用户的登录i...
      99+
      2023-06-29
    • 使用Feign传递请求头信息(Finchley版本)
      目录Feign传递请求头信息实现RequestInterceptor接口注册配置Feign调用微服务传递header请求头Feign传递请求头信息 在我之前的文章服务网关Spring...
      99+
      2024-04-02
    • 使用Feign调用时添加验证信息token到请求头方式
      目录Feign调用添加验证信息token到请求头1、这是最简单的一个方法2、这个方法是网上大多数人的用法3、第三种方法就是大神的方法了Feign中增加请求头最近遇到项目在调用Feig...
      99+
      2024-04-02
    • SpringCloud Feign请求头如何删除修改
      本篇内容主要讲解“SpringCloud Feign请求头如何删除修改”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud Feign请求头如何删除修改”吧!...
      99+
      2023-06-29
    • 在AngularJs中如何设置请求头信息(headers)
      这篇文章主要为大家展示了“在AngularJs中如何设置请求头信息(headers)”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“在AngularJs中如何设置...
      99+
      2024-04-02
    • 如何在PHP项目中使用HTTP请求和响应头部信息?
      PHP是一种广泛使用的编程语言,可以用于开发各种类型的Web应用程序。在Web应用程序中,HTTP请求和响应头部信息是非常重要的组成部分,它们可以提供有用的信息,如请求的内容类型、响应状态码和响应类型等。在本文中,我们将介绍如何在PHP项目...
      99+
      2023-06-30
      http 关键字 git
    • Vue之请求如何传递参数
      目录一、get请求1、直接拼接2、params属性二、post请求1、data属性传递2、params属性传递三、常见的 Content-Type 类型1、application/x...
      99+
      2023-05-14
      Vue请求传递参数 Vue请求 Vue传递参数
    • 使用Feign配置请求头以及支持Https协议
      目录Feign配置请求头及支持Https协议背景Feign配置请求头Feign支持Https协议Feign client 设置请求头信息Feign client端配置文件 appli...
      99+
      2024-04-02
    • springcloud如何使用Feign后台内部传递MultipartFile
      目录如何使用Feign后台内部传递MultipartFile先修改FeignClient接口内部调用注意点Feign进行跨服务传递MultipartFile文件通过feign进行跨服...
      99+
      2024-04-02
    • SpringCloud 如何使用feign时的复杂参数传递
      Feign传参注意 最近在用SpringCloud尝试重构以前的项目,使用Feign客户端组件来调用微服务,经常出现参数传不过去变成null的问题,网上查了一下发现feign在参数上...
      99+
      2024-04-02
    • Vue如何使用axios添加请求头
      这篇“Vue如何使用axios添加请求头”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue如何使用axios添加请求头”文...
      99+
      2023-06-30
    • RestTemplate Get请求如何实现bean参数传递
      今天小编给大家分享一下RestTemplate Get请求如何实现bean参数传递的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
      99+
      2023-07-04
    • 使用HttpServletResponse对象获取请求行信息
      目录HttpServletResponse对象获取请求行信息方法列表实例HttpServletResponse和HttpServletRequest解析HttpServletResp...
      99+
      2024-04-02
    • 如何使用Nginx定义Header头信息
      这篇文章主要介绍“如何使用Nginx定义Header头信息”,在日常操作中,相信很多人在如何使用Nginx定义Header头信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Nginx定义Header...
      99+
      2023-06-27
    • Python 对象和 Unix 系统:如何使用二维码传递信息?
      随着信息技术的发展,我们需要不断地传递信息。而二维码作为一种方便快捷的信息传递方式,被广泛应用于生活和工作中。本文将介绍如何使用 Python 对象和 Unix 系统来生成和解码二维码,并实现信息的传递。 生成二维码 首先,我们需要使用 ...
      99+
      2023-10-07
      对象 二维码 unix
    • SpringCloud如何利用Feign访问外部http请求
      目录Feign访问外部http请求 累死人的写法:(仅参考)话不多说,先上pom.xmlbootstap.yml 部分配置在spingbootApplication启动类上...
      99+
      2024-04-02
    • 如何在PHP中使用头信息函数
      PHP是一种流行的编程语言,常用于web开发。在这个过程中,头信息函数是一个重要的工具,可以帮助我们设置和获取HTTP头信息。本文将介绍如何在PHP中使用头信息函数。一、什么是HTTP头信息在HTTP请求和响应中,头信息用于传递元数据。HT...
      99+
      2023-05-18
      PHP 头信息(Header) 函数(Function)
    • openFeign服务之间调用保持请求头信息处理方式
      openFeign服务间调用保持请求头信息处理 1、注意特殊情况,在定时任务或者内部之间调用,没有request的时候,不要处理直接返回。 2、在GET请求,参数确放在Body里面传...
      99+
      2024-04-02
    • vue如何使用el-upload上传文件及Feign服务间传递文件
      这篇文章主要介绍了vue如何使用el-upload上传文件及Feign服务间传递文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前端代...
      99+
      2024-04-02
    • Feign如何解决服务之间调用传递token
      目录解决服务之间调用传递tokenFeign有提供一个接口RequestInterceptor调用方式Feign调用服务各种坑处理编写被调用服务编写调用api编写客户端服务解决服务之...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作