目录
解决方案:
在配置文件里面加上:
# Spring 相关
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
解决思路:
当我按照 pig 项目的逻辑,手写到微服务内部调用不鉴权逻辑的时候,运行程序发现报错了,一看是PermitAllUrlProperties里面获取路径的错误,我不理解为啥报错,通过打断点发现自己的项目里面请求路径条件确实是 null ,但是请求路径条件有两个!
一个是 PathPatternsRequestCondition,一个是 PatternsRequestCondition
于是我开始想,pig项目里面一定配置了啥是我不知道的,所以才导致这个原因,毕竟我俩依赖的包都是一样的呀;
然后在官网上搜索这两个类,他给的翻译是:
于是我看到两个词 AntPathMatcher PathPatterns ,通过这两个词的名字,能够推断出这个是路径匹配需要的,并且这个是属于 mvc 范畴的,于是就在度娘上搜索:springmvc controller 路径匹配 AntPathMatcher PathMatcher ,于是就看到了这样一篇文章:SpringMVC路径匹配规则AntPathMatcher - 小奔的早晨 - 博客园
看到里面说路径匹配规则,于是又去搜索:SpringMVC的路径匹配规则,搜索到:整合SpringMVC之路径匹配规则_Ricky的技术小站的博客-CSDN博客_springmvc 路径匹配
在这个里面发现有配置路径匹配规则的配置项,于是我就起 pig 项目的nacos 配置文件里面找,找到了:
# Spring 相关
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
重点就在这里!
在2.6.0 之前,默认是ant_path_matcher
解析方式。
在2.6.0 之后,默认是path_pattern_parser
解析方式。
而pig 项目设置了使用ant_path_matcher模式,而我用的是默认的!!!
解决方法找到了,可是还有个疑问就是这俩过滤器有啥区别呢?
ant_path_matcher
通配符可以在中间,如:abc/**/xyz。
path_pattern_parser
通配符只能定义在尾部,如:abc/xyz/**。
可以使用{*path}接收多级路由。path可以随意取名,与@PathVariable名称对应即可。