来自AccessDecisionManager的spring security docs:
默认策略是使用带有RoleVoter和AuthenticatedVoter的AffirmativeBased AccessDecisionManager。
如果任何 AccessDecisionVoter返回肯定响应,则授予访问权限
根据文档,RoleVoter将根据经过身份验证的对象是否具有正确的ROLE_权限进行投票,而AuthenticatedVoter则根据对象是否经过身份验证进行投票。
我的困惑是,AuthenticatedVoter对象投票是什么?在我的应用程序中,我只希望有ROLE_USER的人访问资源。但我也在我的AbstractAuthenticationToken实现上设置了setAuthenticated(true)。
通过阅读文档,AffirmativeBased策略只需要经过身份验证即可访问资源,并且不会对ROLE要求感到烦恼。是否有不同的"经过身份验证"实际被检查的价值是什么?
我知道UnanimousBased策略,但似乎我还没有理解经过验证的测试,否则默认实现中会出现很大的安全漏洞。
答案 0 :(得分:2)
配置授权时,您需要提供配置属性,例如hasRole('admin')
。投票期间,选民将检查是否支持,否则将弃权。对于AuthenticatedVoter
,如果为Role
配置了访问权限,则会弃权。请参阅vote method的源代码。