本文主要是介绍SpringCloud服务之间Feign调用不会带上请求头header,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🧁SpringCloud服务之间Feign调用不会带上请求头header
- 🧊三种方式设置请求头
- 🧊@RequestHeader
- 🧊@Bean RequestInterceptor
- 🧊实现 RequestInterceptor
🧊三种方式设置请求头
在Spring Cloud中,使用Feign进行服务之间的调用时,默认情况下是不会传递header的。如果需要传递header,可以通过以下几种方式实现:
🧊@RequestHeader
- 在Feign的接口方法上使用@RequestHeader注解,指定要传递的header参数。例如:
@FeignClient(name = "other-service")
public interface OtherServiceClient {@GetMapping("/api/some-resource")ResponseEntity<String> getSomeResource(@RequestHeader("Authorization") String token);
}
🧊@Bean RequestInterceptor
- 在Feign的配置类中配置RequestInterceptor,用于设置header。例如:
@Configuration
public class FeignClientConfig {public HttpServletRequest getRequest() {return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();}@Beanpublic RequestInterceptor requestInterceptor() {return template -> {template.header("platform", getRequest().getHeader("platform"));};}
}
🧊实现 RequestInterceptor
- 在Feign的配置文件中配置header。例如:
feign:client:config:default:loggerLevel: fullrequestInterceptors:- com.example.MyRequestInterceptor
public class MyRequestInterceptor implements RequestInterceptor {public HttpServletRequest getRequest() {return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();}@Overridepublic void apply(RequestTemplate template) {template.header("platform", getRequest().getHeader("platform"));}
}
以上是三种常用的方式,根据具体的需求选择适合的方式即可。
这篇关于SpringCloud服务之间Feign调用不会带上请求头header的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!