同步調用
@Configuration
public class FeignConfiguration {
//feign遠程調用丟失請求頭問題
@Bean("requestInterceptor")
public RequestInterceptor requestInterceptor(){
return template -> {
ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String cookie = request.getHeader("Cookie");
template.header("Cookie",cookie);
};
}
}
我這里只添加了header中的Cookie,當然也可以遍歷header,把所有的都添加到新的請求。解決辦法跟Gateway丟失請求頭類似。https://www.cnblogs.com/wwjj4811/p/13937694.html
異步調用
當我們使用異步調用openfeign,上述代碼就會報空指針,獲取不到當前的請求。
解決方法如下:
我們先獲取到當前請求,再分享給子線程。
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
RequestContextHolder.setRequestAttributes(attributes);
feign.doService();
}, executor);