OpenFeign遠端呼叫丟失請求頭
阿新 • • 發佈:2022-01-14
問題:使用OpenFeign進行遠端呼叫後,在遠端服務中攔截請求判斷資料時,發現Session中沒有資料,攜帶的Cookie資料丟失了,而呼叫方是有Cookie資料的,經過一陣排查發現OpenFegin在遠端呼叫時,新建了一個request,裡面什麼都沒有。
Feign遠端呼叫丟失請求頭問題
解決方法:
原理:Feign在遠端呼叫前會通過一些攔截器的apply方法進行增強
寫一個攔截器,在執行Feign遠端呼叫前將原來的資料放到新建的request中
java程式碼
@Configuration public class FeignConfig { @Bean("requestInterceptor") public RequestInterceptor requestInterceptor() { RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void apply(RequestTemplate template) { //1、使用RequestContextHolder拿到剛進來的請求資料 ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (requestAttributes != null) { //老請求 HttpServletRequest request = requestAttributes.getRequest(); if (request != null) { //2、同步請求頭的資料(主要是cookie) //把老請求的cookie值放到新請求上來,進行一個同步 String cookie = request.getHeader("Cookie"); template.header("Cookie", cookie); } } } }; return requestInterceptor; } }