我想在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>