为什么默认的Spring Security策略是AffirmativeBased?

时间:2016-04-21 04:32:47

标签: java spring spring-security

来自AccessDecisionManager的spring security docs

  

默认策略是使用带有RoleVoter和AuthenticatedVoter的AffirmativeBased AccessDecisionManager。

AffirmativeBased选民:

  如果任何 AccessDecisionVoter返回肯定响应,则

授予访问权限

根据文档,RoleVoter将根据经过身份验证的对象是否具有正确的ROLE_权限进行投票,而AuthenticatedVoter则根据对象是否经过身份验证进行投票。

我的困惑是,AuthenticatedVoter对象投票是什么?在我的应用程序中,我只希望有ROLE_USER的人访问资源。但我也在我的AbstractAuthenticationToken实现上设置了setAuthenticated(true)。

通过阅读文档,AffirmativeBased策略只需要经过身份验证即可访问资源,并且不会对ROLE要求感到烦恼。是否有不同的"经过身份验证"实际被检查的价值是什么?

我知道UnanimousBased策略,但似乎我还没有理解经过验证的测试,否则默认实现中会出现很大的安全漏洞。

1 个答案:

答案 0 :(得分:2)

配置授权时,您需要提供配置属性,例如hasRole('admin')。投票期间,选民将检查是否支持,否则将弃权。对于AuthenticatedVoter,如果为Role配置了访问权限,则会弃权。请参阅vote method的源代码。