springcloud-GateWay的Filter

 

 

   由于官方提供的路由过滤器太多,只能自己去查;下面是使用官方过滤器的用法:

  在实际开发中,用自己自定义的过滤器比较多;比如下面作为参考:

复制代码
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        String username = exchange.getRequest().getQueryParams().getFirst("username");

        if(username == null){
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }

        return chain.filter(exchange); //放行执行下一个过滤器,并把exchange交给下一个过滤器
    }

    @Override
    public int getOrder() {
        return 0;
    }
}
复制代码

  是实现一个全局的路由过滤器,需要实现两个接口:GlobalFilter, Ordered,然后覆盖两个方法:

    1. filter():当拦截请求时会执行的方法,跟之前的doFilter一样;但是参数和返回值就比较新颖了,是spring5后才提供的

      > ServerWebExchange:封装了request,response,session以及其他信息,简单的说就是请求常用相关的对象和数据的封装吧

      > Mono<T>:这个有点类似于 统一返回结果的类或接口,作用就是为了统一返回值的类型。

    2. getOrder():该方法是用来确定 过滤器 的执行顺序的,当返回值越小, 则过滤器的执行顺序越优先。

总结:一般在开发中,自定义全局路由过滤器会比较多,通常在过滤器里面做 日志记录 和 鉴权 会更多点。

posted @   爱编程DE文兄  阅读(338)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示