java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringCloud Feign

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

作者:孟德爱吃香菜

在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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文