适配器模式(Gateway中GatewayFilter和GlobalFilter整合实现)
创始人
2024-02-08 21:06:41
0

文章目录

      • GlobalFilter(代表全局过滤器)
      • GatewayFilter(代表路由过滤器)
      • GlobalFilterAdapter(适配器关键)
      • 测试类
      • 执行结果

在SpringCloud Gateway中有两个不同的过滤器接口,分别是GatewayFilter和GlobalFilter。

  • GlobalFilter:全局过滤器。不需要再配置文件中配置,作用在所有的路由上。
  • GatewayFilter:路由过滤器。网关过滤器,需要通过spring.cloud.routes.filters配置在具体的路由下,只作用在当前特定路由上。

在源码中可以看到,两个不同类型的接口,且在没有实现一个公共接口的前提下,能放到同一个combined集合中。这里使用的就是一个适配器模式。

用一个简单的demo记录下对应适配器模式的写法。

更多源码细节,参考gateway源码中的类:org.springframework.cloud.gateway.handler.FilteringWebHandler



GlobalFilter(代表全局过滤器)

public interface GlobalFilter {void filter();
}class GlobalFilter1 implements GlobalFilter{@Overridepublic void filter() {System.out.println("GlobalFilter1");}
}
class GlobalFilter2 implements GlobalFilter{@Overridepublic void filter() {System.out.println("GlobalFilter2");}
}

GatewayFilter(代表路由过滤器)

public interface GatewayFilter {void filter();
}class GatewayFilter1 implements GatewayFilter{@Overridepublic void filter() {System.out.println("GatewayFilter1");}
}class GatewayFilter2 implements GatewayFilter{@Overridepublic void filter() {System.out.println("GatewayFilter2");}
}class GatewayFilter3 implements GatewayFilter{@Overridepublic void filter() {System.out.println("GatewayFilter3");}
}

GlobalFilterAdapter(适配器关键)

将GatewayFilter适配成GlobalFilter

public class GlobalFilterAdapter implements GlobalFilter{private GatewayFilter delegate;@Overridepublic void filter() {delegate.filter();}// 待适配的接口作为参数,外部统一调用GlobalFilter的filter方法。// 但是适配之后的接口,则是通过delegate属性调用真实的GatewayFilter的方法public GlobalFilterAdapter(GatewayFilter delegate) {this.delegate = delegate;}
}

测试类

public class Test {public static void main(String[] args) {List gatewayFilterList = new ArrayList<>();gatewayFilterList.add(new GatewayFilter1());gatewayFilterList.add(new GatewayFilter2());gatewayFilterList.add(new GatewayFilter3());// 全部的需要执行的数据List globalFilters = new ArrayList<>();globalFilters.add(new GlobalFilter1());globalFilters.add(new GlobalFilter2());List globalFilterAdapters = gatewayFilterList.stream().map(GlobalFilterAdapter::new).collect(Collectors.toList());globalFilters.addAll(globalFilterAdapters);// 调用list中所有的过滤方法for (GlobalFilter globalFilter : globalFilters) {globalFilter.filter();}}
}

执行结果

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...