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