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