如何在 Spring Security 3 和 Spring EL 中使用角色层次结构?

Posted

技术标签:

【中文标题】如何在 Spring Security 3 和 Spring EL 中使用角色层次结构?【英文标题】:How to use role-hierarchy in Spring Security 3 with Spring EL? 【发布时间】:2011-01-31 17:28:52 【问题描述】:

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

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

我想如果我为它提供我自己的 RoleHierarchy bean,我将能够使用带有分层角色的 @PreAuthorize 注释。

如何将我的层次结构 bean 注入 SecurityExpressionRoot

【问题讨论】:

【参考方案1】:

为了方法安全,您可以将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>

【讨论】:

以上是关于如何在 Spring Security 3 和 Spring EL 中使用角色层次结构?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 拦截 URL 究竟是如何工作的?

如何在 Spring Security 3 和 Spring EL 中使用角色层次结构?

如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config

spring-security saml2:如何获取当前用户?

如何使用 grails 1.3.2 和插件 spring-security-core 1 实现自定义 FilterSecurityInterceptor?

如何在 Spring Security 3.1 中进行没有身份验证和授权的并发会话控制