1

我的项目中有这个案例:

想象一下,我们有这两行来定义 Spring Security 访问规则:

<intercept-url pattern="/xxx/*" access="isAuthenticated() and (hasRole('roleA') or hasRole('roleB'))" /> 
<intercept-url pattern="/xxx/yyy*" access="isAuthenticated() and (hasRole('role1') or hasRole('role2'))" />

这两种模式是嵌套的,用户可能具有“roleA”和“role1”或“roleA”和“role2”等角色的组合。我想要实现的是让用户拥有“roleC”和“role1”无法访问/xxx/yyy*.

所以我的问题是:

当具有“roleC”和“role1”的用户想要获得模式“xxx/yyy222.html”的访问权限时,是检查所有行的访问规则,还是只检查第二行?在考虑第二行的访问规则时,我是否可以想当然地认为用户可以进入url“xxx/yyy*”只有“roleA”和“roleB”,或者我必须为每一行设置完整的规则规则?

4

1 回答 1

0

intercept-urls 按照它们定义的顺序进行处理,第一个与请求路径匹配的模式决定访问。

当具有“roleC”和“role1”的用户想要获得模式“xxx/yyy222.html”的访问权限时,是检查所有行的访问规则,还是只检查第二行?

这与第一行的模式匹配,访问将被拒绝。

在考虑第二行的访问规则时,我是否可以想当然地认为用户可以进入url“xxx/yyy*”只有“roleA”和“roleB”,或者我必须为每一行设置完整的规则规则?

第二行永远不会被评估。请务必先指定更具体的模式。

我想要实现的是让用户拥有“roleC”和“role1”无法访问/xxx/yyy*。

也许你想要类似的东西:

<intercept-url pattern="/xxx/yyy*" access="isAuthenticated() and !(hasRole('roleC') and hasRole('role1'))" />
于 2015-11-20T13:45:11.700 回答