之前主要使用拦截器添加请求头认证信息,在单线程正常运行,多线程环境则有一定几率在设置拦截器时报错:
RequestEntity<?> request = buildRequest(config, params);
restTemplate.setInterceptors((List<ClientHttpRequestInterceptor>) o )
ResponseEntity<Dict> response = restTemplate.exchange(request, Dict.class);
原因出现在:setInterceptors()方法
解决:不使用拦截器添加请求头,请求头在构建请求时添加:
return RequestEntity
.method(HttpMethod.valueOf(config.getMethod()),resolvedUrl)
.headers(headers)
.body(requestMap);
或者配置默认拦截器,在构建请求时由拦截器动态添加请求头
@Bean
RestTemplate restTemplate(HeaderRequestInterceptor headerRequestInterceptor){
RestTemplate restTemplate = new RestTemplate();
restTemplate.setInterceptors(Collections.singletonList(headerRequestInterceptor));
return restTemplate;
}