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

大功告成!!

原文地址:https://www.cnblogs.com/hnxbp/p/14975363.html