SpringCloud服务之间Feign调用不会带上请求头header的解决方法

 更新时间:2024年01月16日 14:43:04   作者:孟德爱吃香菜  
在Spring Cloud中,使用Feign进行服务之间的调用时,默认情况下是不会传递header的,这篇文章给大家介绍SpringCloud服务之间Feign调用不会带上请求头header的解决方法,感兴趣的朋友一起看看吧

三种方式设置请求头

在Spring Cloud中,使用Feign进行服务之间的调用时,默认情况下是不会传递header的。如果需要传递header,可以通过以下几种方式实现:

@RequestHeader

1.在Feign的接口方法上使用@RequestHeader注解,指定要传递的header参数。例如:

@FeignClient(name = "other-service")
public interface OtherServiceClient {
    @GetMapping("/api/some-resource")
    ResponseEntity<String> getSomeResource(@RequestHeader("Authorization") String token);
}

@Bean RequestInterceptor

2.在Feign的配置类中配置RequestInterceptor,用于设置header。例如:

@Configuration
public class FeignClientConfig {
    public HttpServletRequest getRequest() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }
    @Bean
    public RequestInterceptor requestInterceptor() {
        return template -> {
            template.header("platform", getRequest().getHeader("platform"));
        };
    }
}

实现 RequestInterceptor

3.在Feign的配置文件中配置header。例如:

feign:
  client:
    config:
      default:
        loggerLevel: full
        requestInterceptors:
          - com.example.MyRequestInterceptor
public class MyRequestInterceptor implements RequestInterceptor {
  public HttpServletRequest getRequest() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }
    @Override
    public void apply(RequestTemplate template) {
        template.header("platform", getRequest().getHeader("platform"));
    }
}

以上是三种常用的方式,根据具体的需求选择适合的方式即可。

到此这篇关于SpringCloud服务之间Feign调用不会带上请求头header的文章就介绍到这了,更多相关SpringCloud Feign内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java幸运28系统搭建数组的使用实例详解

    Java幸运28系统搭建数组的使用实例详解

    在本篇文章里小编给大家整理了关于Java幸运28系统搭建数组的使用实例内容,有需要的朋友们可以参考学习下。
    2019-09-09
  • 在Spring MVC中处理请求参数的方法总结

    在Spring MVC中处理请求参数的方法总结

    在Spring MVC中处理请求参数是通过使用各种注解来实现的,本文给大家介绍了在Spring MVC中处理不同类型请求参数的方法,并通过代码讲解的非常详细,需要的朋友可以参考下
    2024-08-08
  • 基于Java实现计数排序,桶排序和基数排序

    基于Java实现计数排序,桶排序和基数排序

    这篇文章主要为大家详细介绍了计数排序,桶排序和基数排序的多种语言的实现(JavaScript、Python、Go语言、Java),感兴趣的小伙伴可以了解一下
    2022-12-12
  • SpringBoot项目实现分布式日志链路追踪

    SpringBoot项目实现分布式日志链路追踪

    这篇文章主要给大家介绍了Spring Boot项目如何实现分布式日志链路追踪,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • SpringBoot如何取消内置Tomcat启动并改用外接Tomcat

    SpringBoot如何取消内置Tomcat启动并改用外接Tomcat

    这篇文章主要介绍了SpringBoot如何取消内置Tomcat启动并改用外接Tomcat,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • IntelliJ IDEA cmd和idea Terminal查看java版本不一致的解决方案

    IntelliJ IDEA cmd和idea Terminal查看java版本不一致的解决

    原来win10电脑上安装的是jdk8的版本,因某些原因,现在想换成jdk7的版本,修改环境变量后,在cmd中执行 [java -version]命令,显示的是7的版本,遇到这样的问题如何解决呢?下面小编给大家分享IntelliJ IDEA cmd和idea Terminal查看java版本不一致的解决方案,一起看看吧
    2023-09-09
  • IntelliJ IDEA 安装及初次使用图文教程(2020.3.2社区版)

    IntelliJ IDEA 安装及初次使用图文教程(2020.3.2社区版)

    这篇文章主要介绍了IntelliJ IDEA 安装及初次使用(2020.3.2社区版),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java常用字符串方法小结

    Java常用字符串方法小结

    字符串变量是Java与C语言的一大不同之处。Java之中的 String 类和 Stringbuffer 类提供了大量的对字符串操作的方法。String 类适合处理较小的字符串,而Stringbuffer类适合处理大量字符串
    2017-04-04
  • Mybatis在sqlite中无法读写byte[]类问题的解决办法

    Mybatis在sqlite中无法读写byte[]类问题的解决办法

    这篇文章主要给大家介绍了关于Mybatis在sqlite中无法读写byte[]类问题的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java如何限制IP访问页面

    Java如何限制IP访问页面

    这篇文章主要介绍了Java如何限制IP访问页面,帮助大家完成需求,实现白名单,感兴趣的朋友可以了解下
    2020-09-09

最新评论