Spring 如何要求多个角色/权限

Spring 如何要求多个角色/权限,spring,spring-security,spring-4,Spring,Spring Security,Spring 4,据我所知,只有@Secured注释或ExpressionUrlAuthorizationConfigurer对象中的任何列表可用。尝试添加多个批注或hasAuthority()调用可能无法编译,或者只使用了最新的批注 如何定义特定请求(与模式匹配的请求集)或方法需要所有角色/权限列表?您似乎在使用:hasAuthority([authority])。这只需要一个权限。而是使用hasAnyAuthority([authority1,authority2])。这允许您一次指定多个权限,并且可以在授权

据我所知,只有
@Secured
注释或
ExpressionUrlAuthorizationConfigurer
对象中的任何列表可用。尝试添加多个批注或
hasAuthority()
调用可能无法编译,或者只使用了最新的批注


如何定义特定请求(与模式匹配的请求集)或方法需要所有角色/权限列表?

您似乎在使用:
hasAuthority([authority])
。这只需要一个权限。而是使用
hasAnyAuthority([authority1,authority2])
。这允许您一次指定多个权限,并且可以在授权中考虑任何权限。参考官方的spring文档。只需在页面中找到文本:
hasAnyAuthority([authority1,authority2])


例如,在控制器方法上,添加:
@PreAuthorize(“hasAnyAuthority('permission1','permission2')”)

最佳解决方案似乎是

@PreAuthorize("hasRole('one') and hasRole('two') and ...")

没有很好的方法可以使用常量,比如将
@Secured

作为端点范围的解决方案,您可以使用

.antMatchers("/user/**").access("hasAuthority('AUTHORITY_1') and hasAuthority('AUTHORITY_2')")

我只使用了两个权限对它进行了测试,但我想您可以和-不止两个。

在使用
ExpressionUrlAuthorizationConfigurer
时,对于
@Secured
access()
,您的意思是
@preauthority
,不是
@Secured
?问题是无法添加到SpEL上下文中,因此无法使用常量指定名称。不,但为什么需要常量?为什么有人希望在常量中的多个位置使用硬编码字符串?为了减少bug和更好的可维护性。正如问题中所述,这是其中的任何一个,而不是全部。在我的项目中,我使用
hasAuthority
而不是
hasRole
,这也适用于权限(只需更改权限的角色):
@PreAuthorize(“hasAuthority('one')和hasAuthority('two'),以及……)
对于任何人,您都可以更改
@Ernani
角色('x')权限('ROLE_x')