真是因为少写了一个return导致排查了好长时间。
最近在慕课网上学习springcloud alibaba,在搭建gateway路由的时候出现了路由转发转发不到的情况。
大概背景是,我在nacos上写了个配置,是关于gateway路由的配置,写了一个自定义局部过滤器,这个过滤器的主要作用就是判断一下是否有权限去调用另一个微服务。
大体原理就是路径 http://localhost:9000/test/....
回去判断路径中是否有/test这个标识如果有可以接着走过滤器链,如果没有返回401没有权限。
那么错误来了,我在测试能否路由到其他微服务的时候发现路由不到!
起初第一反应是路由配置写错了
然后检查了一遍发现没问题,排除了路由配置的问题。
可能是没有注册到ioc容器中导致获取不到对象。然后检查了一遍注解确实都写了,但是还是测试了一遍
打印一下日志,发现在发送请求的时候并没有输出日志,说明根本没有走这个局部过滤器
但是配置应该是没问题按常理来说是可以走这个过滤器的。
于是我又以为是局部过滤器没有生效,我就开始面向百度编程,终于找到了一个类似的问题的解决方案
大概意思是配置文件里将这个设置false否则就不会走自定义过滤器。
我满心欢喜以为自己找到了正确答案结果md 还是访问不到
于是我静下心来把整个过程又回想了一遍,结果发现还是不知道什么问题
我又开始不断地改http请求,加日志看最后还是无济于事
终于我放弃了我开始对慕课网上的源码,其实第一遍对我还是没发现问题因为太隐蔽了哈哈哈
这里没有return最开始
完整代码
本来不写return没什么问题其实也可以返回正确的结果就是多走了一遍过滤器链,问题出现就出现在我配置了一个去除前缀的过滤器,当他走完这个过滤器链的时候这个exchange的url已经没有了 /test这个标识导致没了。
标识没了 自然再次过滤器的时候就不会有结果。
问题解决了以后一定要注意小细节!