如何要求多个 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
据我所知只有 任何 列表在 @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