Spring security 使用Spring Security Java配置配置DefaultMethodSecurityExpressionHandler

Spring security 使用Spring Security Java配置配置DefaultMethodSecurityExpressionHandler,spring-security,spring-boot,Spring Security,Spring Boot,我试图在Spring引导应用程序中使用Spring Security提供的角色层次结构功能,发现java配置存在一些问题 在该应用程序中,我启用了GlobalMethodSecurity,以便使用@PreAuthorize注释。因此,为了使用角色层次结构支持,我需要做的是创建DefaultMethodSecurityExpressionHandler的新实例,并使用我们想要的配置(角色层次结构本身)设置RoleHierarchyImpl实例 尽管如此,如果我尝试使用websecurityConf

我试图在Spring引导应用程序中使用Spring Security提供的角色层次结构功能,发现java配置存在一些问题

在该应用程序中,我启用了
GlobalMethodSecurity
,以便使用
@PreAuthorize
注释。因此,为了使用角色层次结构支持,我需要做的是创建
DefaultMethodSecurityExpressionHandler
的新实例,并使用我们想要的配置(角色层次结构本身)设置
RoleHierarchyImpl
实例

尽管如此,如果我尝试使用
websecurityConfigureAdapter
configure(HttpSecurity http)
方法执行此操作,我无法执行此操作,因为
.expressionHandler()
需要一个
SecurityExpressionHandler
,而
DefaultMethodSecurityExpressionHandler
是一个
SecurityExpressionHandler

为了解决这个问题,我发现解决方案是创建
GlobalMethodSecurityConfiguration
的子类,并重写创建
ExpressionHandler
bean的方法,就像文档中描述的那样

这么说,我想知道
.expressionHandler()
方法是否也不允许进行此配置。如果没有,javadoc中指向
GlobalMethodSecurityConfiguration
的引用可能会有用


在这之后,我认为
websecurityConfigureAdapter
.expressionHandler
的思想只适用于基于http请求过滤器应用的安全性,而不应该应用于方法级别,但是,欢迎发表意见和建议,以确认我正在做它应该做的事情。

您可以将RoleHierarchyImpl作为Bean公开,然后使用RoleHierarchyImpl创建DefaultMethodSecurityExpressionHandler。然后可以使用RoleHierarchyImpl Bean创建DefaultWebSecurityExpressionHandler的实例,并在expressionHandler()上设置该实例。我们可以做的是,如果您将RoleHierachy的一个实例公开为一个Bean,那么默认情况下我们可以使用它。如前一句所述,我创建了一个简单的解决方案,这个解决方案听起来非常好。。这样,我们只需要公开rolehierarchyimplbean,就可以完成配置了!