背景
項目中需要用到以前開發的一套項目,需要復用里面的一些接口,遠程調用發現出現了空指針異常
,原來是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
大功告成!!