龙空技术网

Feign拦截器RequestInterceptor

王朋code 112

前言:

现时各位老铁们对“http请求拦截工具”可能比较重视,你们都想要学习一些“http请求拦截工具”的相关内容。那么小编同时在网摘上收集了一些对于“http请求拦截工具””的相关文章,希望你们能喜欢,朋友们快快来了解一下吧!

在使用Feign做服务间调用的时候,如何修改请求的头部或编码信息呢,可以通过实现RequestInterceptor接口的apply方法,feign在发送请求之前都会调用该接口的apply方法,所以我们也可以通过实现该接口来记录请求发出去的时间点。

@Beanpublic RequestInterceptor requestInterceptor() {    return new RequestInterceptor() {        @Override        public void apply(RequestTemplate requestTemplate) {            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();            if(attributes!=null){                HttpServletRequest request = attributes.getRequest();                if(request !=null){                    String trcId = request.getHeader(TrcFilter.HEADER_X_ZUUL_TRC_ID);                    requestTemplate.header(TrcFilter.HEADER_X_ZUUL_TRC_ID,trcId);                    log.info("feign拦截器获取到的trcid={}",trcId);                }            }        }    };}

RequestInterceptor接口定义了apply方法,其参数为RequestTemplate;它有一个抽象类为BaseRequestInterceptor,还有几个实现类分别为BasicAuthRequestInterceptor、FeignAcceptGzipEncodingInterceptor、FeignContentGzipEncodingInterceptorBasicAuthRequestInterceptor实现了RequestInterceptor接口,其apply方法往RequestTemplate添加名为Authorization的headerBaseRequestInterceptor定义了addHeader方法,往requestTemplate添加非重名的header;FeignAcceptGzipEncodingInterceptor继承了BaseRequestInterceptor,它的apply方法往RequestTemplate添加了名为Accept-Encoding,值为Gzip,deflate的header;FeignContentGzipEncodingInterceptor继承了BaseRequestInterceptor,其apply方法先判断是否需要compression,即mimeType是否符合要求以及content大小是否超出阈值,需要compress的话则添加名为Content-Encoding,值为Gzip,deflate的header

标签: #http请求拦截工具