背景
项目中需要用到以前开发的一套项目,需要复用里面的一些接口,远程调用发现出现了空指针异常
,原来是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
大功告成!!