当前位置: 首页 > news >正文

国贸行业的网站建设有赞云 wordpress

国贸行业的网站建设,有赞云 wordpress,网站模板 站长之家,企业网站可以自己做过滤器的种类 Spring-Cloud-Gateway中提供了3种类型的过滤器#xff0c;分别是#xff1a;路由过滤器、Default过滤器和Global过滤器。 路由过滤器和Default过滤器 路由过滤器和Default过滤器本质上是同一种过滤器#xff0c;只不过作用范围不一样#xff0c;路由过滤器…过滤器的种类 Spring-Cloud-Gateway中提供了3种类型的过滤器分别是路由过滤器、Default过滤器和Global过滤器。 路由过滤器和Default过滤器 路由过滤器和Default过滤器本质上是同一种过滤器只不过作用范围不一样路由过滤器只针对单个路由起作用而Default过滤器对整个路由表中所有的路由都起作用这2个过滤器的处理逻辑都是Spring已经内置好的无须开发人员来写代码只需要做一下配置即可。 Spring已经提供好了30多种这样的过滤器比如 AddRequestHeaderAddRequestParameterStripPrefix… 这些过滤器都是org.springframework.cloud.gateway.filter.GatewayFilter的子类每一种过滤器都是由一种过滤器工厂来生成的比如AddRequestHeaderGatewayFilterFactory生成AddRequestHeader的过滤器AddRequestParameterGatewayFilterFactory生成AddRequestParameter的过滤器StripPrefixGatewayFilterFactory生成StripPrefix的过滤器 Global过滤器 Global过滤器与上面两个不一样Global过滤器需要开发人员自己来实现业务逻辑并且它是org.springframework.cloud.gateway.filter.GlobalFilter的子类。 过滤器的执行顺序 如果是Global过滤器可以让Global过滤器实现org.springframework.core.Ordered接口来设置过滤器的顺序但是这里注意org.springframework.core.annotation.Order这个注解是不起作用的。 如果是路由过滤器和Default过滤器他们的处理逻辑是Spring内置的因此他们的顺序是按照声明的顺序从1开始递增的比如 routes:- id: userserviceuri: lb://userservicepredicates:- Path/user/**filters:- AddRequestHeaderRouterFilter1, router1- AddRequestHeaderRouterFilter2, router2default-filters:- AddRequestHeaderDefaultFilter1, default1- AddRequestHeaderDefaultFilter1, default2以上的配置种router1的order是1router2的order是2default1的order是1default2的order是2也就是说按照他们声明的顺序从1往上递增。 那么当系统中同时存在这么多过滤器的时候他们的执行顺序是什么样子的呢比如我现在同时定义了GlobalFilter1和GlobalFilter2还有配置了router1、router2、default1、default2的时候 Component public class GlobalFilter1 implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(global1);return chain.filter(exchange);}Overridepublic int getOrder() {return 2;} }还有GlobalFilter2 Component public class GlobalFilter2 implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(global2);return chain.filter(exchange);}Overridepublic int getOrder() {return 1;} }只需要在org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()上打断点看一下即可 Override public MonoVoid handle(ServerWebExchange exchange) {Route route exchange.getRequiredAttribute(GATEWAY_ROUTE_ATTR);// 拿到所有的路由过滤器包含了Default过滤器ListGatewayFilter gatewayFilters route.getFilters();// 拿到所有的Global过滤器ListGatewayFilter combined new ArrayList(this.globalFilters);// 先添加的Global过滤器然后再添加的路由过滤器combined.addAll(gatewayFilters);// TODO: needed or cached?AnnotationAwareOrderComparator.sort(combined);if (logger.isDebugEnabled()) {logger.debug(Sorted gatewayFilterFactories: combined);}// 在这一行打断点查看下combined之后的内容return new DefaultGatewayFilterChain(combined).filter(exchange); }如下 从源码种可以看出来是先添加的Global过滤器然后再添加的路由过滤器从上面的截图也可以看出来GlobalFilter2排在最前面后面依次是default1、router1、GlobalFilter1、default2、router2。 可以继续在org.springframework.cloud.gateway.filter.factory.AddRequestHeaderGatewayFilterFactory#filter()方法和GlobalFilter上打断点看一下后续的执行顺序。 因此这些过滤器的执行顺序首先是根据order进行的排序如果order相同优先级是GlobalDefaultRouter。 3种过滤器的类型都不一样为啥可以在一块进行排序 Global过滤器是org.springframework.cloud.gateway.filter.GlobalFilter的子类但是路由过滤器和Default过滤器是org.springframework.cloud.gateway.filter.GatewayFilter的子类他们为啥可以放在一个集合中进行排序呢 还是看org.springframework.cloud.gateway.handler.FilteringWebHandler这个类它里面有一个loadFilters()方法 private static ListGatewayFilter loadFilters(ListGlobalFilter filters) {return filters.stream().map(filter - {// 把GlobalFilter适配成了GatewayFilterAdapterGatewayFilterAdapter gatewayFilter new GatewayFilterAdapter(filter);// 并且这里计算顺序的时候只是从Ordered接口取的if (filter instanceof Ordered) {int order ((Ordered) filter).getOrder();return new OrderedGatewayFilter(gatewayFilter, order);}return gatewayFilter;}).collect(Collectors.toList()); } // GatewayFilterAdapter 就实现了GatewayFilter接口 private static class GatewayFilterAdapter implements GatewayFilter {private final GlobalFilter delegate;GatewayFilterAdapter(GlobalFilter delegate) {this.delegate delegate;}Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {return this.delegate.filter(exchange, chain);} }从上面的源码可以看出来gateway框架在启动的时候会把系统中所有的GlobalFilter适配成GatewayFilterAdapter 而GatewayFilterAdapter 是实现了GatewayFilter 接口的因此GlobalFilter也就适配成了GatewayFilter 因此他们是可以放到一个集合进行排序的。同时可以看到在获取GlobalFilter的order时候只是使用Ordered接口并没有使用Order注解。 结论 Global过滤器的顺序是由Ordered接口来定义Order不起作用。路由过滤器和Default过滤器的顺序是按照声明的顺序从1开始递增所有的Global过滤器、路由过滤器、Default过滤器最终会放到一个集合中按照order大小进行排序如果order值一样优先就是Global过滤器Default过滤器路由过滤器 ps以上测试结论基于spring-cloud.versionHoxton.SR10/spring-cloud.version
http://www.sczhlp.com/news/183895/

相关文章:

  • 手机销售网站怎么做大佬做的魔法少女网站
  • 天津seo网络营销seo优化在线诊断
  • 北京卓天下网站建设公司设计师入驻平台
  • wordpress开发者中心百度seo快速提升排名
  • 搜索引擎网站推广法 怎么做贵阳住房和城乡建设部网站
  • 杭州微网站建设晋城市建设局网站
  • 海口网站制作公司芙蓉区网站建设
  • 管理多个wordpress博客seo外包服务专家
  • 建设网站是什么职位在网站开发中哪里需要js文件
  • 有没有做软件的外包网站淘宝刷网站建设
  • 深圳专业网站建设安徽网站推广公司
  • 网站建设包括备案吗免费数据源网站
  • 爱站互联网科技公司做网站哪家好
  • 网站建设基地中国移动采购与招标网
  • 桂林市建设局网站排名优化网站建设
  • h5响应式网站源码常见的办公网网站开发
  • 温州市网站建设哪家公司好手机应用开发流程
  • 公司网站开发费用计入哪个科目山东省住房和城乡建设部网站首页
  • 网络营销型网站建设昆明自助建站模板
  • 做同城特价的网站有哪些无代码开发平台永久免费
  • 做网站只有搜网址吗视觉设计作品
  • php网站开发什么怎么通过做网站赚钱吗
  • 柳州住房和城乡建设厅网站深圳网络工程公司
  • 腾讯网站统计代码青岛做网站哪家专业
  • 微网站设计招聘网站建设流程图
  • 网站开发专员绩效考核开源wiki做网站
  • 承德市网站开发英语网站都可以做哪些内容
  • 部门网站建设管理办法南宁网站怎么制作公司
  • 邢台建设企业网站价格dedecms 旅游网站模板
  • 在线制作书封网站域名哪个网站买最好