此问题已在此处找到答案:
如何将spring security antmatchers模式仅应用于带有pathvariable的url(3个答案)
上个月关门了。
我一直试图在spring boot for httpsecurity中为特定api路径定义一个角色。我的路径基本上如下所示:
/v3/files/{uuid}?subject=与链接共享
uuid-->不是静态的,类似于acc-1a433a56-d5cf-4185-b55e-7ac75d530b79
可能有额外的路径参数,如:
/v3/files/{uuid}?subject=与链接共享
/v3/files/{uuid}?size=100&subject=shared_与_链接
/v3/files/{uuid}?subject=shared_与_link&sortby=name&size=100
为了防止未经授权访问api,我必须小心使用regex。正则表达式中必须正好有“/v3/files/”。“{uuid}”部分可以包含字母数字字符和“-”字符。路径的其余部分必须包含“subject=shared\u with\u link”
我无法为这种路径格式构建正则表达式,它对我来说有点复杂,正如我所说,我担心未经授权的访问。
你能帮我建立正则表达式吗?
例如,我创建了以下正则表达式(不包括上述所有要求):
^/v3/files/[\w\-]*(\?)?$
1条答案
按热度按时间s4n0splo1#
您可以使用以下内容:
演示。
笔记:
使用
[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
使用一个字符类,该类包含希望参数名称/值支持的任何字符。即使连字符在字符类末尾时不需要转义,但我更喜欢显式转义,尤其是在涉及安全性的情况下。这确保了当附加更多字符时,模式不会中断(或者更糟的是,接受不需要的字符)。