Feign配置遠程調用時攜帶原請求的token


背景

項目中需要用到以前開發的一套項目,需要復用里面的一些接口,遠程調用發現出現了空指針異常,原來是token為null,嘗試解決該問題。

受限於之前開發的接口中沒有參數,所以簡單使用注解無法解決,故采用攔截請求的方式

環境介紹

SpringBoot 2.3.3.Release + OpenFeign 2.2.7.Release

配置過程

1、引入依賴, 配置feign

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

2、注入配置類

@Configuration
@Slf4j
public class FeignConfiguration implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String token = request.getHeader(HeaderConstants.TOKEN_HEADER_NAME); // HeaderConstants.TOKEN_HEADER_NAME 替換為自己的請求頭名稱,下同
        if(token == null){
            log.info("--請求中未攜帶token.......");
            return;
        }
        requestTemplate.header(HeaderConstants.TOKEN_HEADER_NAME, token);
    }
}

3、在@FeignClient注解中標注配置類

@FeignClient(url = "${gizwits.config.system-api.url:}",value = IServiceName.SERVICE_NAME, path = "sys_user", configuration = FeignConfiguration.class)

4、如果你debug的話,會發現FeignConfiguration中的attributes獲取不到,需要再配置文件中添加如下配置就可以了

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE

大功告成!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM