42 Spring Cloud Gateway全局过滤器(GlobalFilter)
2021-03-01 16:30
标签:过滤 ram new buffer 统一 nts util har 一个 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证、IP 访问限制等。 接口定义类 org.springframework.cloud.gateway.filter.GlobalFilter Spring Cloud Gateway 自带的 GlobalFilter 实现类有很多 有转发、路由、负载等相关的 GlobalFilter,感兴趣的朋友可以去看下源码自行了解。我们如何通过定义 GlobalFilter 来实现我们的业务逻辑? 这里给出一个官方文档上的案例 上面定义了 3 个 GlobalFilter,通过 @Order 来指定执行的顺序,数字越小,优先级越高。下面就是输出的日志,从日志就可以看出执行的顺序,如下所示。 当 GlobalFilter 的逻辑比较多时,笔者还是推荐大家单独写一个 GlobalFilter 来处理,比如我们要实现对 IP 的访问限制,即不在 IP 白名单中就不能调用的需求。 过滤的使用虽然比较简单,但作用很大,可以处理很多需求,上面讲的 IP 认证拦截只是冰山一角,更多的功能需要我们自己基于过滤器去实现。 42 Spring Cloud Gateway全局过滤器(GlobalFilter) 标签:过滤 ram new buffer 统一 nts util har 一个 原文地址:https://www.cnblogs.com/jrkl/p/14430389.htmlpublic interface GlobalFilter {
Mono
@Configuration
public class ExampleConfiguration {
private Logger log = LoggerFactory.getLogger(ExampleConfiguration.class);
@Bean
@Order(-1)
public GlobalFilter a() {
return (exchange, chain) -> {
log.info("first pre filter");
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("third post filter");
}));
};
}
@Bean
@Order(0)
public GlobalFilter b() {
return (exchange, chain) -> {
log.info("second pre filter");
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("second post filter");
}));
};
}
@Bean
@Order(1)
public GlobalFilter c() {
return (exchange, chain) -> {
log.info("third pre filter");
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("first post filter");
}));
};
}
}
单独定义只需要实现 GlobalFilter、Ordered 两个接口就可以了,具体代码如下所示。@Component
public class IPCheckFilter implements GlobalFilter, Ordered {
@Override
public int getOrder() {
return 0;
}
@Override
public Mono
下一篇:js交错合并数组
文章标题:42 Spring Cloud Gateway全局过滤器(GlobalFilter)
文章链接:http://soscw.com/index.php/essay/58640.html