• Spring Cloud Alibaba学习笔记(21)


    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器。

    自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFilter 有一样的方法定义,只不过 GlobalFilter 的实例会作用于所有的路由。

    自定义全局过滤器

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.stereotype.Component;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Mono;
    
    /**
     * 自定义全局过滤器
     */
    @Slf4j
    @Component
    public class CustomizeGlobalFilter implements GlobalFilter {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            String path = exchange.getRequest().getURI().getPath();
            log.info("[CustomizeGlobalFilter] 访问的接口:{}", path);
    
            long start = System.currentTimeMillis();
            return chain.filter(exchange)
                    // then的内容会在过滤器返回的时候执行,即最后执行
                    .then(Mono.fromRunnable(() ->
                            log.info("[ {} ] 接口的访问耗时:{} /ms", path, System.currentTimeMillis() - start)
                    ));
        }
    }
    

    上述代码中,我们使用@Component注解使该全局过滤器生效。还有一种方式,就是使用一个专门的配置类去实例化这些全局过滤器并交给Spring容器管理,代码如下:

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.Ordered;
    import org.springframework.core.annotation.Order;
    
    @Slf4j
    @Configuration
    public class FilterConfig {
    
        @Bean
        // 该注解用于指定过滤器的执行顺序,数字越小越优先执行
        @Order(Ordered.HIGHEST_PRECEDENCE)
        public GlobalFilter myGlobalFilter(){
            log.info("create myGlobalFilter...");
            return new MyGlobalFilter();
        }
    }
    
  • 相关阅读:
    使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
    Mybatis学习 PageHelper分页插件
    mysql 5.1.7.17 zip安装 和 隔段时间服务不见了处理
    使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
    一位资深程序员大牛给予Java初学者的学习建议
    数据结构和算法学习 -- 线性表
    多线程的实现方式区别
    Log4j.properties属性文件
    Java自定义注解
    Spring配置属性文件
  • 原文地址:https://www.cnblogs.com/fx-blog/p/11753054.html
Copyright © 2020-2023  润新知