Spring security 为什么Spring Security';s RoleVoter需要前缀吗?

Spring security 为什么Spring Security';s RoleVoter需要前缀吗?,spring-security,Spring Security,在我们的应用程序中,我们计划使用RoleVoter机制,但我们希望删除ROLE\uu前缀,因为我们实现的安全性更基于任务而不是基于角色 从技术上讲,实现没有问题,但我在文档中发现了这一点 我想知道为什么 AFAICS唯一的问题是,如果没有前缀,RoleVoter将参与其不打算参与的决策(例如已完全验证,已验证,…),并可能返回拒绝访问而不是弃权 您能确认这是唯一一个前缀为空的问题吗 提前谢谢 是的。如果您使用多个投票者或自定义投票者,那么他们需要知道应该使用哪些属性。例如,如果您有一个dayOf

在我们的应用程序中,我们计划使用
RoleVoter
机制,但我们希望删除
ROLE\uu
前缀,因为我们实现的安全性更基于任务而不是基于角色

从技术上讲,实现没有问题,但我在文档中发现了这一点

我想知道为什么

AFAICS唯一的问题是,如果没有前缀,
RoleVoter
将参与其不打算参与的决策(例如
已完全验证
已验证
,…),并可能返回拒绝访问而不是弃权

您能确认这是唯一一个前缀为空的问题吗

提前谢谢
是的。如果您使用多个投票者或自定义投票者,那么他们需要知道应该使用哪些属性。例如,如果您有一个
dayOfWeekWater
并且您有一个使用属性
ROLE\u USER,DAY\u MONDAY
定义的资源,则
RoleVoter
可能会投票授予访问权,因为该用户具有角色“USER”,但
dayOfWeekWater
可能会拒绝访问,因为它不是星期一

如果您没有使用前缀配置
RoleVoter
,那么它将检查用户是否拥有分配给他们的名为“DAY_MONDAY”的权限,因此此场景将不起作用


如果您只对角色感兴趣,那么您可以不使用前缀,或者您可以使用表达式(例如
hasRole('user')
),而不使用
RoleVoter

你好,Luke,我刚刚将Spring Boot从1.2.2升级到1.3.2,这对我来说开始起刹车作用。我的控制器有@PreAuthorize(“hasRole('Edit')”),现在它开始检查角色前缀。自从您发布此答案后,您对hasRole()的解释似乎有所改变,因为它正在通过RoleVoter。我试图找到将前缀设置为空“”的方法,但没有一种有效……您能推荐另一种方法在SpringBoot1.3.2中实现这一点吗?