如何设置管理员/超级用户角色以使用Spring Security获得完全访问权限?

时间:2010-11-05 20:43:59

标签: spring-security

我想限制基于角色的目录访问,例如:

<intercept-url pattern="/foo/**" access="hasRole('ROLE_FOO')"/>
<intercept-url pattern="/bar/**" access="hasRole('ROLE_BAR')"/>

但我还想要一个可以访问所有内容的超级用户角色,例如:

<intercept-url pattern="/**" access="hasRole('ROLE_SUPERUSER')"/>

除了使用hasAnyRole之外,还有其他方法可以实现吗?例如,

<!-- This seems ugly, with all the repeated references. OTOH, it's explicit -->
<intercept-url pattern="/foo/**" access="hasAnyRole('ROLE_FOO', 'ROLE_SUPERUSER')"/>
<intercept-url pattern="/bar/**" access="hasRole('ROLE_BAR') or hasRole('ROLE_SUPERUSER')"/>

2 个答案:

答案 0 :(得分:0)

RoleHierarchy似乎是一种情况。

虽然我找不到如何配置它的好方法。也许这种粗略的方法可行:

public class RoleHierarchyInjectionBeanPostProcessor implements BeanPostProcessor {        
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if (bean instanceof DefaultWebSecurityExpressionHandler) {
            ((DefaultWebSecurityExpressionHandler) bean).setRoleHierarchy(...);
        }
        return bean;
    }     
    ...
}

答案 1 :(得分:0)

this article中,有类似问题的解决方案。您可以忽略有关JMX的部分,对您而言,重要的是关于AccessDecisionManagerAccessDecisionVoter的讨论。我们的想法是注册实现AccessDecisionVoter逻辑的自定义if (superuser) grant access;

相关问题