源码地址:https://download.csdn.net/download/weixin_42950079/87209379
初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:
Spring MVC拦截器发生在客户端
和 服务端
之间,在客户端向服务端发送请求时进行拦截处理。
Spring Cloud OpenFeign拦截器发生在两个不同的服务
之间,在服务消费端发送请求远程调用服务提供方时进行拦截处理。
OpenFeign拦截器有两种配置方式:
java方式配置
application.yml配置文件中配置
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class OpenFeignRequestInterceptor implements RequestInterceptor {Logger logger = LoggerFactory.getLogger(this.getClass());@Overridepublic void apply(RequestTemplate requestTemplate) {// Todo/*** 根据需求可以在拦截器中扩展需要的功能:* 1、日志记录* 2、设置请求头 requestTemplate.header("xxx", "xxx");* 3、增加参数* 4、修改请求参数 / 修改路径* 5、权限鉴定* . . .*/logger.info("OpenFeign拦截器 . . .");}
}
import com.cd.order8010.feign.interceptor.OpenFeignRequestInterceptor;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 全局配置:加了@Configuration注解表示全局配置,对所有服务起作用* 局部配置:不加@Configuration注解表示局部配置,只针对指定的一个服务起作用,需要在 OpenFeign 接口的@FeignClient注解中,通过configuration属性中指定 OpenFeign 的扩展配置类*/
@Configuration
public class OpenFeignConfig {// 日志级别配置@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}// 自定义拦截器@Beanpublic OpenFeignRequestInterceptor openFeignRequestInterceptor(){return new OpenFeignRequestInterceptor();}
}
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class OpenFeignRequestInterceptor implements RequestInterceptor {Logger logger = LoggerFactory.getLogger(this.getClass());@Overridepublic void apply(RequestTemplate requestTemplate) {// Todo/*** 根据需求可以在拦截器中扩展需要的功能:* 1、日志记录* 2、设置请求头 requestTemplate.header("xxx", "xxx");* 3、增加参数* 4、修改请求参数 / 修改路径* 5、权限鉴定* . . .*/logger.info("OpenFeign拦截器 . . .");}
}
feign:client:config:stock-service: # 这里写default就是全局配置。如果是写服务名称(如:stock-service),则是针对某个微服务的配置,即局部配置logger-level: BASIC #日志级别request-interceptors: #自定义拦截器- com.cd.order8010.feign.interceptor.OpenFeignRequestInterceptor