0

在 Spring Security 中,我们可以使用以下构造限制对某些 Web 资源的访问: <intercept-url pattern="/admin.xhtml" access="hasPermission('admin')" />

现在,我有很多页面,要访问每个页面,都应该具有与页面名称相同的特殊权限。intercept-url接受模式,但似乎不提供从正则表达式匹配组传递到的pattern参数access。我想要这样的东西:

<intercept-url pattern="/([a-z]+).xhtml" access="hasPermission('$1')" />
4

1 回答 1

2

不幸的是,您不能在访问规则中使用匹配的正则表达式组。作为一种解决方法,您可以尝试定义自定义 Web 安全表达式。它将负责提取一些匹配的正则表达式组:

<intercept-url pattern="/([a-z]+).xhtml" access="hasPermission(extractGroup('$1', '/([a-z]+).xhtml'))" />

在执行期间extractGroup(...)方法将能够使用当前的 HttpRequest。这个解决方案有两个缺点:1)做起来不是那么简单 2)正则表达式模式将在你的 conf 中重复。如果您觉得没问题,那么您可以在此处阅读如何添加自定义 Web 安全表达式。

于 2013-01-30T12:52:18.693 回答