目的:在于解决微服务调用过程中header的传递,尤其在需要权限认证的调用链中header的传递
首先编写feignClient的拦截器,需要实现接口
feign.RequestInterceptor;
@Slf4j
public class HeaderIntercepter implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if (attributes!=null){
String memberId = attributes.getRequest().getHeader("memberId");
if (!StringUtils.isEmpty(memberId)){
log.info("feignClient requestHeader add memberId:{}",memberId );
requestTemplate.header("memberId",memberId);
}
}
}
}
其次,需要配置feignClient的config,就通用的两种办法任选一种即可,
配置文件中
feign:
client:
config:
default:
loggerLevel: full
requestInterceptors:
- cn.demo.test.openfeignApi.intercepter.HeaderIntercepter
readTimeout: 3000
connectTimeout: 3000
写在代码中
@Configuration
public class FeignConfig {
@Bean
public Logger.Level level(){
return Logger.Level.FULL;
}
@Bean
public RequestInterceptor requestInterceptor(){
return new HeaderIntercepter();
}
}
就可以实现memberId以header的形式在为服务间的传递