0

我是 Spring Security 模块的新手。我想知道两个安全过滤器有什么区别?

<security:intercept-url method="GET" pattern="/newapi/user/**" access="hasRole('ROLE_USER','LOW_ADMIN')" />
<security:intercept-url method="GET" pattern="/newapi/user/*/*" access="hasRole('ROLE_USER,'BIG_ADMIN')" />

此外,似乎第一个安全过滤器阻止执行第二个过滤器,因为当我执行 /newapi/user/data/7897896 时,只有第一个安全过滤器正在执行,但预计我会执行第二个安全过滤器。谁能告诉我为什么会这样以及我们如何解决这些问题?

仅供参考 - 我们有非常大/巨大的 Web 应用程序,其中定义了近 150 多个安全过滤器,因此调试此类安全相关问题真的变得越来越困难。任何 Spring Security 专家,我们可以在这里谈谈您的想法吗?

4

1 回答 1

0

<intercept-url>规则从上到下应用。因此,这个新的应该放在原来的之前,否则它将被 /** 路径的广泛范围覆盖,这就是你的第二个安全过滤器没有执行的原因。您需要更改如下序列

<security:intercept-url method="GET" pattern="/newapi/user/*/*" access="hasRole('ROLE_USER,'BIG_ADMIN')" />
<security:intercept-url method="GET" pattern="/newapi/user/**" access="hasRole('ROLE_USER','LOW_ADMIN')" />
于 2015-11-03T05:11:25.163 回答