【问题标题】:How can I set an Admin/Superuser role to have complete access using Spring Security?如何使用 Spring Security 设置管理员/超级用户角色以获得完全访问权限?
【发布时间】:2010-11-05 20:43:58
【问题描述】:

我想根据角色限制对目录的访问,例如:

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

【问题讨论】:

    标签: spring-security


    【解决方案1】:

    看起来像是RoleHierarchy 的案例。

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

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

    【讨论】:

      【解决方案2】:

      this article 中有一个类似问题的解决方案。你可以忽略关于 JMX 的部分,对你来说重要的是关于 AccessDecisionManagerAccessDecisionVoter 的讨论。这个想法是注册一个自定义的AccessDecisionVoter,实现if (superuser) grant access;logic。

      【讨论】:

        猜你喜欢
        • 2018-07-06
        • 2019-09-15
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2017-01-07
        • 2016-05-20
        • 1970-01-01
        相关资源
        最近更新 更多