1. 程式人生 > 其它 >OpenFeign遠端呼叫丟失請求頭

OpenFeign遠端呼叫丟失請求頭

問題:使用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;
    }

}