我想在Spring Security的服务方法上使用@PreAuthorize注释。要求之一是使用角色层次结构。但默认情况下,它未启用。
我发现在 SecurityExpressionRoot 类(“表达式根对象的基类”)中有一个属性 roleHierarchy。该类实际上对这样的方法使用了这个属性 hasRole()和 hasAnyRole()。
我想如果我使用自己的 RoleHierarchy bean提供它,我将能够使用具有分层角色的@PreAuthorize注释。
如何将我的层次结构bean注入 SecurityExpressionRoot ?
答案 0 :(得分:7)
对于方法安全性,您可以将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>