如何使用Ant模式仅匹配含数值类型@PathVariable的接口路径?
解决方案
你可以通过给路径变量增加正则约束的Ant模式实现需求,修改后的匹配规则如下:
"/noun1/noun2/{id:\\d+}/**"
原理解释
- Spring 内置的
AntPathMatcher支持对路径变量追加正则校验,语法为{变量名:正则表达式}。你场景中id是数值类型,用\\d+即可匹配1个及以上的纯数字字符。 - 调整规则后,只有路径第三段为纯数字的请求才会命中该安全规则,
/noun1/noun2/noun3/verb5这类第三段为字符串的路径会自动被过滤,不会触发匹配。如果你的id支持负数值,把正则调整为-?\\d+即可。
其他可选方案
如果不想使用正则约束,也可以调整安全规则的优先级:
- 先为不带id的路径单独配置对应规则:
/noun1/noun2/noun3/** - 再配置你原来的
/noun1/noun2/{id}/**规则
Spring Security的路径规则是从上到下按顺序匹配,先匹配到的规则优先生效,也能避免id路径规则误匹配到noun3的路径。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

