SpringMvc的拦截器:
Feign的拦截器:
实现拦截器这里需要实现 feign包下提供的一个接口RequestInterceptor,并实现apply方法
你的拦截逻辑都可以写在apply这个方法中
@Component
public class MyFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// 拦截逻辑 。。。
}
}
你可以在里面打印一些日志、也可以设置这个新请求的header、query、uri等信息
通常情况下我们会在拦截器的header里面增加一些认证信息
@Component
public class MyFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
// 获取当前线程 老请求的httpServletRequest
HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
if(httpServletRequest != null) {
// 从老请求的request对象中拿到header中的authorization信息
String authorization = httpServletRequest.getHeader("authorization");
// 为requestTemplate这个新的请求对象 传递 用户信息请求头
requestTemplate.header("Authorization", authorization);
}
}
}
然后可以手动生成该类的bean对象 注入到spring容器中(其实上面的类已经加上@Component注解了,不手动加应该也没问题)
@Configuration
public class FeignAutoConfiguration
{
@Bean
public RequestInterceptor requestInterceptor()
{
return new FeignRequestInterceptor();
}
}



