如何要求多个 roles/authorities

How to require multiple roles/authorities

据我所知只有 任何 列表在 @Secured 注释或 ExpressionUrlAuthorizationConfigurer 对象中可用。尝试添加多个注释或 hasAuthority() 调用要么编译失败,要么只使用最新的一个。

我如何定义特定请求(匹配模式的一组请求)或方法需要所有 roles/authorities列表?

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

我只测试了两个权威机构,但我想你可以而且 - 超过两个。

你可以像.hasAnyAuthority("manager", "customer");

一样使用hasAnyAuthority