我想在Spring Security的服务方法上使用@PreAuthorize批注。要求之一是使用角色层次结构。但默认情况下未启用。

我发现在SecurityExpressionRoot类(“表达根对象的基类”)中有一个属性roleHierarchy。实际上,该类确实将此属性用于hasRole()和hasAnyRole()之类的方法。

我想,如果我为它提供自己的RoleHierarchy bean,那么我将能够对分层角色使用@PreAuthorize批注。

如何将层次结构bean注入SecurityExpressionRoot?

最佳答案

为了方法安全,可以将RoleHierarchy设置为DefaultMethodSecurityExpressionHandler的属性,如下所示:

<global-method-security ...>
    <expression-handler ref = "methodSecurityExpressionHandler" />
</global-method-security>

<beans:bean id = "methodSecurityExpressionHandler"
    class = "org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <beans:property name = "roleHierarchy" .../>
</beans:bean>

09-28 14:56