regex - 路径参数正则表达式
问题描述
我一直在尝试为 Spring Boot for HttpSecurity 中的特定 API 路径定义一个角色。我的路径基本上如下:
/v3/files/{uuid}?subject=SHARED_WITH_LINK
uuid --> 不是静态的,类似于ACC-1a433a56-d5cf-4185-b55e-7ac75d530b79
可能有额外的路径参数,如:
- /v3/files/{uuid}?subject=SHARED_WITH_LINK
- /v3/files/{uuid}?size=100&subject=SHARED_WITH_LINK
- /v3/files/{uuid}?subject=SHARED_WITH_LINK&sortBy=name&size=100
为了防止对 API 的未经授权的访问,我必须小心正则表达式。正则表达式中必须有“/v3/files/” 。“ {uuid}”部分可以包含字母数字字符和“-”字符。路径的其余部分必须包含“subject=SHARED_WITH_LINK”
我无法为这种路径格式构建正则表达式,这对我来说有点复杂,正如我所说,我担心未经授权的访问。
你能帮我建立正则表达式吗?
例如,我创建了以下正则表达式(不涵盖上述所有要求):
^/v3/files/[\w\-]*(\?)?$
解决方案
您可以使用以下内容:
^/v3/files/[A-Za-z0-9\-]+\?(?:\w+=\w+&)*subject=SHARED_WITH_LINK(?:&\w+=\w+)*$
演示。
笔记:
使用
[A-Za-z0-9\-]
而不是[\w-]
更具限制性(即,拒绝下划线和 Unicode *字母数字)。- 使用
+
量词代替*
UUID 字符以避免匹配零长度 UUID。您可能希望使用更高的最小长度(即{n,}
),或者如果您的 UUID 格式始终相同(很可能是这种情况),您应该更加明确,并且仅通过使用ACC-[a-z0-9]{8}-(?:[a-z0-9]{4}-){3}[a-z0-9]{12}
来匹配该特定格式。
- 使用
用于
\w+=\w+
匹配单个参数。您可能希望替换\w
为包含您希望参数名称/值支持的任何字符的字符类。尽管连字符在字符类末尾时不需要转义,但我更喜欢显式转义它,尤其是在考虑安全性时。这可确保在附加更多字符时模式不会中断(或更糟的是,接受不需要的字符)。
* 默认情况下可能禁用 Unicode 支持,但为了安全起见。
推荐阅读
- spring - Spring Boot DTO/Payload 验证,带有额外的非必填字段
- loops - Fortran中循环退出后索引变量的值
- reactjs - 未找到 JSXBundle
- go - gobwas-ws clean conn 关闭
- plugins - Mercurial插件不可用?
- xamarin.forms - ImageCropper.Forms 抛出:“找不到方法
- javascript - 为什么 jQuery 不能更新事件中的输入值?
- elasticsearch - 在文件列表中查找每天的最低价格
- c - 当我在动态数组输入函数中使用 realloc 时出现分段错误(核心转储)
- ant-design-pro - 更改 Ant Design Pro 表格分页语言