路径参数正则表达式

Path Parameter Regex

我一直在尝试为 Spring Boot for HttpSecurity 中的特定 API 路径定义一个角色。 我的路径基本上如下所示:

/v3/files/{uuid}?subject=SHARED_WITH_LINK

uuid --> 不是静态的,类似 ACC-1a433a56-d5cf-4185-b55e-7ac75d530b79

可能有额外的路径参数,如:

  1. /v3/files/{uuid}?subject=SHARED_WITH_LINK
  2. /v3/files/{uuid}?size=100&subject=SHARED_WITH_LINK
  3. /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+)*$

Demo.

备注:

  • 使用 [A-Za-z0-9\-] 而不是 [\w-] 更具限制性(即拒绝下划线和 Unicode* 字母数字)。

    • 对 UUID 字符使用 + 量词而不是 * 以避免匹配零长度 UUID。您可能希望使用更高的最小长度(即 {n,}),或者如果您的 UUID 格式始终相同(很可能是这种情况),您应该更明确并且仅通过使用 [=16 来匹配该特定格式=] 代替。
  • 使用\w+=\w+匹配单个参数。您可能希望将 \w 替换为包含您希望参数 name/value 支持的任何字符的字符 class。

  • 即使连字符位于字符末尾时不需要转义 class,我还是更喜欢明确地转义它,尤其是在考虑安全性时。这确保在附加更多字符时模式不会中断(或更糟,接受不需要的字符)。


* Unicode 支持可能默认禁用,但为了安全起见。