为什么Spring Security的RoleVoter需要一个前缀?

时间:2012-07-18 10:19:38

标签: spring-security

在我们的应用程序中,我们计划使用RoleVoter机制,但我们要删除ROLE_前缀,因为我们正在实施的安全性比基于任务更多< em>基于角色。

从技术上讲,实施没有问题,但我在文档中发现using the RoleVoter with an empty prefix should be discouraged

我想知道为什么?

AFAICS,唯一的问题是,如果没有前缀,RoleVoter将参与其不适合的决策(例如IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED,...并且可能会返回拒绝访问而不是弃权。

请问您确认这是唯一一个空前缀的问题吗?

提前致谢 微米。

1 个答案:

答案 0 :(得分:15)

是。如果您使用多个选民或自定义选民,那么他们需要某种方式知道他们应该使用哪些属性。例如,如果您有DayOfTheWeekVoter并且您使用属性ROLE_USER,DAY_MONDAY定义了资源,那么RoleVoter可能会投票授予访问权限,因为用户具有“User”角色,但{ {1}}可能拒绝访问,因为它不是星期一。

如果您没有使用前缀配置DayOfTheWeekVoter,那么它将检查用户是否具有分配给他们的名为“DAY_MONDAY”的权限,因此这种情况不起作用。

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