• OpenFeign设置header的3种方式


    设置OpenFeign的FeignClient的Header信息

    在微服务间使用Feign进行远程调用时需要在 header 中添加信息,那么 SpringBoot和SpringCloud OpenFeign的@FeignClient如何设置 header 呢?有5种方式可以设置请求头信息:

    • 在@RequestMapping注解里添加headers属性
    • 在方法参数前面添加@RequestHeader注解
    • 实现RequestInterceptor接口
    由于Feign是完全支持Spring MVC注解的, 所以推荐使用前两种Feign设置header的方式, 即: Spring MVC中使用注解设置header.

    1、在@RequestMapping注解里添加headers属性

    在application.yml中配置

    1. my.name=wtl
    2. @PostMapping(value = "/service/rest/v1/script/{scriptName}/run",headers = {"Authorization=Basic YWRtaW46QFdUTDE5OTIwMTE4MDI3MQ==","Content-Type=text/plain","AppSecret=${my.name}"})
    3. String runScript(@PathVariable("scriptName") String scriptName);

    2、在方法参数前面添加@RequestHeader注解

    设置单个header属性

    1. @PostMapping(value = "/service/rest/v1/script/{scriptName}/run",headers = {"Content-Type=text/plain","AppSecret=${my.name}"})
    2. String runScript(@PathVariable("scriptName") String scriptName,@RequestHeader("Authorization") String authorization);
    1. public String runScript(String scriptName) {
    2. return nexusOpenFeign.runScript(scriptName,"Basic YWRtaW46QFdUTDE5OTIwMTE4MDI3MQ==");
    3. }

    设置多个header属性

    1. @PostMapping(value = "/service/rest/v1/script/{scriptName}/run")
    2. String runScript(@PathVariable("scriptName") String scriptName,@RequestHeader MultiValueMap headers);
    1. public String runScript(String scriptName) {
    2. MultiValueMap<String, String> headers = new HttpHeaders();
    3. headers.put("Authorization", Collections.singletonList("Basic YWRtaW46QFdUTDE5OTIwMTE4MDI3MQ=="));
    4. headers.add("Content-Type","text/plain");
    5. return nexusOpenFeign.runScript(scriptName,headers);
    6. }

    3、实现RequestInterceptor接口

    如果FeignRequestInterceptor注入到spring容器的话就会全局生效, 就是说即使在没有指定configuration属性的FeignClient该配置也会生效。
    配置@Component或@Service 或 @Configuration 就可以将该配置注入spring容器中, 即可实现全局配置, 从而该项目中的所有FeignClient的feign接口都可以使用该配置.
    如果只想给指定FeignClient的feign接口使用该配置, 请勿将该类配置注入spring中。

    1. @Configuration
    2. public class FeignRequestInterceptor implements RequestInterceptor {
    3. @Override
    4. public void apply(RequestTemplate template) {
    5. template.header(HttpHeaders.AUTHORIZATION, "tokenVal");
    6. }
    7. }
    1. @FeignClient(url = "${user.api.url}", name = "user", configuration = FeignRequestInterceptor.class)
    2. public interface UserFeignClient {
    3. @GetMapping(value = "/simple/{id}")
    4. public User findById(@RequestParam("id") String id);
    5. }
  • 相关阅读:
    ubuntu 20.04安装 Anaconda教程
    Java学习笔记5.2.1 List接口 - ArrayList类
    Dubbo-Adaptive实现原理
    kafka入门小结( windows本地环境)
    JAVA高并发——线程池
    Leetcode.51. N 皇后
    移动软件开发实验三——视频播放小程序
    Android Studio环境搭建与helloworld
    【CMN】Components组件汇总
    浅谈无线测温产品在菲律宾某工厂配电项目的应用
  • 原文地址:https://blog.csdn.net/jcc4261/article/details/127608825