• Spring Cloud OpenFeign - - - >拦截器


    源码地址:https://download.csdn.net/download/weixin_42950079/87209379



    SpringMVC拦截器 和 OpenFeign拦截器 的区别

    cd

    初学者很容易将 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拦截器 . . .");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25



    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拦截器 . . .");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 2、在application.yml配置文件中指定我们创建的自定义OpenFeign拦截器类。
    feign:
        client:
            config:
              stock-service:  # 这里写default就是全局配置。如果是写服务名称(如:stock-service),则是针对某个微服务的配置,即局部配置
                  logger-level: BASIC  #日志级别
                  request-interceptors: #自定义拦截器
                    - com.cd.order8010.feign.interceptor.OpenFeignRequestInterceptor
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    cd



    测试

    在这里插入图片描述

  • 相关阅读:
    Last Week in Milvus
    计算机网络——常见问题汇总2
    如何用jOOQ将一个嵌套的SQL集合类型安全地映射到一个嵌套的Java地图上
    使用 C# 进行面向对象编程:第 9 部分
    如何使用 Nginx 创建临时和永久重定向
    位运算的一些经典题目
    【测试开发】用例篇 · 熟悉黑盒测试用例设计方法(1)等价类划分法、边界值法、判定表法
    Oracle数据库面试题-5
    (Open Shortest Path First,OSPF)实验4
    【最新区块链论文录用资讯】CCF A—FSE 2024 共4篇 附pdf
  • 原文地址:https://blog.csdn.net/weixin_42950079/article/details/128082947