This concrete implementation polls all configured {@link AccessDecisionVoter}s for each {@link ConfigAttribute} and grants access if
only grant (or abstain) votes were received.
Other voting implementations usually pass the entire list of ConfigAttributes to the AccessDecisionVoter
. This implementation differs in that each AccessDecisionVoter
knows only about a single ConfigAttribute
at a time.
If every AccessDecisionVoter
abstained from voting, the decision will be based on the {@link #isAllowIfAllAbstainDecisions()} property (defaults to false).
@param authentication the caller invoking the method
@param object the secured object
@param attributes the configuration attributes associated with the method being invoked
@throws AccessDeniedException if access is denied