Spring Security在验证用户登录后的另一个重要步骤就是对受保护资源进行授权判断,以确定当前登录用户是否具有相应的权限访问当前受保护资源,针对受保护资源的权限设置在相关安全配置文件中进行设定,而当用户登录后,用户的相应权限也就随之确定,将两者进行比较,查看访问当前受保护资源的权限是否在当前登录用户的权限列表中,这一系列的过程都是由FilterSecurityInterceptor过滤器来拦截的,相应的处理又由于过滤器分发到AccessDecisionManager接口的相应实现中,该接口有一个抽象的实现,名叫AbstractAccessDecisionManager,里面有一个AccessDecisionVoter的列表属性,每个AccessDecisionManager管理器中都有一系列AccessDecisionVoter,代表投票器,针对一个受保护资源是否有权访问就是根据这一系统的投票器来决定的。我在这儿以选举来举例,针对一个国家元首的选举,由选举委员会负责进行计票工作,这个选举委员会就类似于AccessDecisionManager,而民众的投票方式可能有电话,现场,网络等几种方式,每一种方式就对应着一个AccessDecisionVoter,如果这几种投票方式只要其中任何一种赞成就通过的话,需要使用的是AffirmativeBased实现,如果这几种投票方式只有当赞成的票数大于反对的票数才能通过的话,需要使用的是ConsensusBased实现,如果这几种投票方式只有所有的投票千万才能通过。
如果在安全配置文件中没有进行自定义设置,Spring Security默认实现的是两种投票器,一种是AuthenticatedVoter,一种是RoleVoter