路径参数正则表达式
Path Parameter 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+)*$
Demo.
备注:
使用 [A-Za-z0-9\-]
而不是 [\w-]
更具限制性(即拒绝下划线和 Unicode* 字母数字)。
- 对 UUID 字符使用
+
量词而不是 *
以避免匹配零长度 UUID。您可能希望使用更高的最小长度(即 {n,}
),或者如果您的 UUID 格式始终相同(很可能是这种情况),您应该更明确并且仅通过使用 [=16 来匹配该特定格式=] 代替。
使用\w+=\w+
匹配单个参数。您可能希望将 \w
替换为包含您希望参数 name/value 支持的任何字符的字符 class。
即使连字符位于字符末尾时不需要转义 class,我还是更喜欢明确地转义它,尤其是在考虑安全性时。这确保在附加更多字符时模式不会中断(或更糟,接受不需要的字符)。
* Unicode 支持可能默认禁用,但为了安全起见。
我一直在尝试为 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+)*$
Demo.
备注:
使用
[A-Za-z0-9\-]
而不是[\w-]
更具限制性(即拒绝下划线和 Unicode* 字母数字)。- 对 UUID 字符使用
+
量词而不是*
以避免匹配零长度 UUID。您可能希望使用更高的最小长度(即{n,}
),或者如果您的 UUID 格式始终相同(很可能是这种情况),您应该更明确并且仅通过使用 [=16 来匹配该特定格式=] 代替。
- 对 UUID 字符使用
使用
\w+=\w+
匹配单个参数。您可能希望将\w
替换为包含您希望参数 name/value 支持的任何字符的字符 class。即使连字符位于字符末尾时不需要转义 class,我还是更喜欢明确地转义它,尤其是在考虑安全性时。这确保在附加更多字符时模式不会中断(或更糟,接受不需要的字符)。
* Unicode 支持可能默认禁用,但为了安全起见。