feign 请求问题

原因

默认的 feign 设计就是不会通过 gateway 网关组件进行数据的获取操作,但是使用 context 组件中间添加对应的 Header 实现上下文数据的传递操作就能替换 gateway 操作的实现功能操作

解决方案

实现 RequestInterceptor 拦截器

直接在拦截器中间添加对应的请求头实现原来的上下文的数据传递操作

@Slf4j
public class FeignRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        Long userId = LoginUserContextHolder.getUserId();

        // 对应的userId不为空直接设置在请求头中间
        if (Objects.nonNull(userId)) {
            requestTemplate.header(GlobalConstants.USER_ID, String.valueOf(userId));
            log.info("########## feign 请求设置请求头 userId: {}", userId);
        }
    }
}

配置 context 组件中间的 feign 自动配置

直接使用上下文的 Header 操作不在项目启动的时候将数据进行填充操作,需要配置对应的 AutoConfiguration 之后在项目的启动中间实现对应的数据传递操作

/**
 * @author Caius
 * @description feign 请求拦截器自动配置
 * @since Created in 2025-05-18
 */
@AutoConfiguration
public class FeignContextAutoConfiguration {

    @Bean
    public FeignRequestInterceptor feignRequestInterceptor() {
        return new FeignRequestInterceptor();
    }
}

配置 imports 文件中间的 AutoConfig 位置

com.caius.framework.biz.context.config.FeignContextAutoConfiguration

最后将上下文组件进行重新的 install 之后就能实现数据的传递操作来