- 在第一次請求方,配置該攔截器:
@Configuration
public class FeignInterceptor implements RequestInterceptor {
// TODO 所有feign調用均會被攔截
@Override
public void apply(RequestTemplate requestTemplate) {
HttpServletRequest request = getHttpServletRequest();
if (null == request){
return;
}
Map<String,String> headers = getHeaders(getHttpServletRequest());
for(String headerName : headers.keySet()){
requestTemplate.header(headerName, getHeaders(getHttpServletRequest()).get(headerName));
}
}
private HttpServletRequest getHttpServletRequest() {
try {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
} catch (Exception e) {
return null;
}
}
private Map<String, String> getHeaders(HttpServletRequest request) {
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;
}
}
-
重點配置
A服務配置bootstrap.yml
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
- 在使用feign接受方參數接受HttpServletRequest:
public AjaxResponseObject getRequestByUser(HttpServletRequest request){
}
- 或者使用注入:
@Autowired
private HttpServletRequest servletRequest;
public String test() {
return servletRequest.getHeader("token");
}
參考于此文章