为什么一个安全过滤器阻止在 Spring MVC 安全应用程序中执行另一个安全过滤器?

why one security filter blocking to execute to another in Spring MVC-security app?

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

<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 时,只执行第一个安全过滤器,但我应该执行第二个安全过滤器。谁能告诉我为什么会这样以及我们如何解决这些问题?

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

<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')" />