我想限制基于角色的目录访问,例如:
<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')"/>
答案 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的部分,对您而言,重要的是关于AccessDecisionManager
和AccessDecisionVoter
的讨论。我们的想法是注册实现AccessDecisionVoter
逻辑的自定义if (superuser) grant access;
。