1、概述
今天一个朋友, 遇到一个如何在使用spring cloud feign 传递token 等参数问题。
2、解决方案
2.1 创建类继承RequestInterceptor
创建类继承RequestInterceptor 具体如下代码所示:
public class FeginInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
Map<String,String> headers = getHeaders();
for(String headerName : headers.keySet()){
requestTemplate.header(headerName, getHeaders().get(headerName));
}
/**
* 返回所有header 中的数据
* Return
*/
private Map<String, String> getHeaders() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Map<String, String> map = new LinkedHashMap<>();
Enumeration<String> enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String key = enumeration.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
return map;
}
}
2.2 在@configuration 类中定义其
@Configuration
public class FeginSupportHeader {
@Bean
public RequestInterceptor getRequestInterceptor(){
return new FeginInterceptor();
}
}
2.3 在yml 或者properties 中添加下面关键配置
# To set thread isolation to SEMAPHORE
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
3、总结
按照上面的操作就可以将上一个服务或者是前端传递过来的header参数传递到下一个服务中去。
需要注意的是, 每个请求都会拦截设置上header信息。
4. 参考地址
http://cloud.spring.io/spring-cloud-openfeign/single/spring-cloud-openfeign.html