源码地址:https://download.csdn.net/download/weixin_42950079/87209379
SpringMVC拦截器 和 OpenFeign拦截器 的区别
初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:
-
Spring MVC拦截器发生在
客户端
和服务端
之间,在客户端向服务端发送请求时进行拦截处理。 -
Spring Cloud OpenFeign拦截器发生在
两个不同的服务
之间,在服务消费端发送请求远程调用服务提供方时进行拦截处理。
OpenFeign拦截器
OpenFeign拦截器有两种配置方式:
-
java方式配置
-
application.yml配置文件中配置
java方式配置
- 1、创建自定义拦截器类,并实现 RequestInterceptor 拦截器接口。
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());
@Override
public void apply(RequestTemplate requestTemplate) {
// Todo
/**
* 根据需求可以在拦截器中扩展需要的功能:
* 1、日志记录
* 2、设置请求头 requestTemplate.header("xxx", "xxx");
* 3、增加参数
* 4、修改请求参数 / 修改路径
* 5、权限鉴定
* . . .
*/
logger.info("OpenFeign拦截器 . . .");
}
}
- 2、在配置类中 注入 自定义拦截器类( Bean )
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 {
// 日志级别配置
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
// 自定义拦截器
@Bean
public OpenFeignRequestInterceptor openFeignRequestInterceptor(){
return new OpenFeignRequestInterceptor();
}
}
application.yml配置文件中配置
- 1、创建自定义拦截器类,并实现 RequestInterceptor 拦截器接口。
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());
@Override
public void apply(RequestTemplate requestTemplate) {
// Todo
/**
* 根据需求可以在拦截器中扩展需要的功能:
* 1、日志记录
* 2、设置请求头 requestTemplate.header("xxx", "xxx");
* 3、增加参数
* 4、修改请求参数 / 修改路径
* 5、权限鉴定
* . . .
*/
logger.info("OpenFeign拦截器 . . .");
}
}
- 2、在application.yml配置文件中指定我们创建的自定义OpenFeign拦截器类。
feign:
client:
config:
stock-service: # 这里写default就是全局配置。如果是写服务名称(如:stock-service),则是针对某个微服务的配置,即局部配置
logger-level: BASIC #日志级别
request-interceptors: #自定义拦截器
- com.cd.order8010.feign.interceptor.OpenFeignRequestInterceptor