若直接访问localhost:8080/test 则网关会匹配失败
结合一些filter更好用哦
假如应用访问地址是localhost:8001/app, 接口地址是/test,这里设置了prefixPath为/app, 那么当你访问localhost:8080/test, 网关在帮你转发请求之前,会在/test 前加上/app,转发时的请求就变成了localhost:8001/app/test。
这个filter比较灵活的就是可以进行正则匹配替换,如下的例子就是当请求localhost:8080/test时,匹配所有以/开头的路径,然后在前面加上/app,所以现在请求变成了localhost:8080/app/test。然后转发时的url变成了localhost:8001/app/test 。在测试的时候,这个filter是没办法使用模板进行匹配的。可能是因为它是用的正则进行匹配替换,所以没办法使用模板吧
值得注意的是在yml文档中 \ 。替换路径是使用的是String.replaceAll()方法,这个方法和replace()不同,是根据正则进行替换的。具体的替换规则感兴趣的话可以去了解一下Pattern。
https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html
这个filter的使用方式比较简单。就是匹配到满足/a开头的路径后重新设置路径为以/app开头。
看到这里,大家应该大概了解了模板{...}的具体用法了吧。模板里面的变量可通过ServerWebExchange.getAttributes()获得。具体的请参看官方文档。
最后的最后,因为好奇三种关于path的filter能不能一起用,所以做了个测试。
但是!!我们来看看SetPathGatewayFilterFactory的apply方法。一进入这个方法,{path}(/test)就被记录下来了。当另外两个filter的return方法执行完了之后,才会执行这个方法的return 方法。最后路径就会被替换为/a/test。所以SetPathFilter和另外两个Filter是没办法同时生效滴!
最后的最后的最后。。来打脸了。这个filter的执行顺序和配置定义的顺序是有关系的。。
按照这个顺序的话,先执行的就是将 /test替换为 /a/test,然后替换为/api/a/test,最后替换为/app/api/test。。
由此得出的结论是只要SetPath这个filter在其他两个filter之前执行的话还是不冲突的。。
新建5个机房每个机房30台电脑给定网络地址空间用二进制位。30台主机,占用5个二进制位。剩余3个二进制位可以表示8个子网。首先这是c类地址,你要分三个子网,每个子网分别有30,20,10台电脑。我们知道每个c类地址有24位网络地址,8位主机地址。最多的一个子网有30台电脑,所以我们要从主机位借位,这里需要借3位,那么主机位还剩下5位,可以连接2的5次方减2个也就是30个,满足要求。借来的三个主机位从000到111可以分8个子网,但是我们通常不用全是0和全是1的也就是000和111不用,剩下6个我们用其中三个子网。另外3个可以备用。我们就用001和010和011这三个。5位主机位相应的从00000到11111。现在我们把借来的三位网络位和主机位连起来就是00100000-00011111这是第一个子网的所有地址,以此类推第二个01000000-01000000第三个01100000-01100000换算成十进制就是32到63是第一个子网64到95时第二个子网,96-127是第三个子网。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)