我试图在Spring Boot应用程序中使用Spring Security提供的Role Hierarchy功能,我发现了java config的一些问题。
在该应用程序中,我启用了GlobalMethodSecurity
以使用@PreAuthorize
注释。因此,为了使用Role Hierarchy支持,我需要做的是创建DefaultMethodSecurityExpressionHandler
的新实例,并使用我们想要的配置设置RoleHierarchyImpl
实例的实例(角色层次结构本身)。
但是,如果我尝试使用WebSecurityConfigurerAdapter
和configure(HttpSecurity http)
方法执行此操作,我无法执行此操作,因为.expressionHandler()
期待SecurityExpressionHandler<FilterInvocation>
DefaultMethodSecurityExpressionHandler
是SecurityExpressionHandler<MethodInvocation>
。
为了解决这个问题,我发现解决方案是创建GlobalMethodSecurityConfiguration
的子类并覆盖创建ExpressionHandler
bean的方法,就像在docs中描述的那样
GlobalMethodSecurityConfiguration - Spring Security Docs
通过这样说,我想知道.expressionHandler()
方法是否也不允许进行此配置。如果没有,可能在指向GlobalMethodSecurityConfiguration
的javadoc中的引用将是有用的。
在此之后,我认为WebSecurityConfigurerAdapter
和.expressionHandler
的想法只适用于基于http请求的过滤器应用的安全性,并且不应该应用它在方法层面,但欢迎意见和建议确认我正在按照预期进行。