要避免这种情况,请创建父角色ALL_ADMINS,并设置弹簧安全层级角色,请参阅documentation以了解更多详细信息。
创建与配置的角色层次结构中的角色选民:
<bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
<constructor-arg ref="roleHierarchy" />
</bean>
<bean id="roleHierarchy"
class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<property name="hierarchy">
<value>
ROLE_ALL_ADMINS > ROLE_ADMIN
ROLE_ALL_ADMINS > ROLE_SUPERADMIN
...
</value>
</property>
</bean>
然后把它应用到自定义访问决策管理:
<beans:bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<beans:property name="decisionVoters">
<beans:list>
<beans:bean ref="roleVoter" />
<beans:bean class="org.springframework.security.access.vote.AuthenticatedVoter"/>
</beans:list>
</beans:property>
</beans:bean>
和持续配置自定义访问决策管理器通过使用@Secured
:
<global-method-security access-decision-manager-ref="accessDecisionManager">
...
</global-method-security>