代码之家  ›  专栏  ›  技术社区  ›  Larry OBrien

如何使用Spring Security将管理员/超级用户角色设置为具有完全访问权限?

  •  1
  • Larry OBrien  · 技术社区  · 14 年前

    <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 回复  |  直到 14 年前
        1
  •  0
  •   axtavt    14 年前

    它看起来像一个箱子 RoleHierarchy .

    但我找不到配置它的好方法。或许这种粗略的方法会奏效:

    public class RoleHierarchyInjectionBeanPostProcessor implements BeanPostProcessor {        
        public Object postProcessAfterInitialization(Object bean, String beanName) {
            if (bean instanceof DefaultWebSecurityExpressionHandler) {
                ((DefaultWebSecurityExpressionHandler) bean).setRoleHierarchy(...);
            }
            return bean;
        }     
        ...
    }
    
        2
  •  0
  •   gpeche    14 年前

    this article 有一个解决类似问题的办法。你可以忽略关于JMX的部分,对你来说重要的是 AccessDecisionManager AccessDecisionVoter 投票机制 实现了 if (superuser) grant access;