Spring Security AccessDecisionManager

  • AccessDecisionManager
    持有多个 AccessDecisionVoter
  • AccessDecisionVoter
    为对应的规则表决,表决结果交给 accessDecisionManager 判断

其中内置的 3 种实现

  • AffirmativeBased (默认实现)
    一票通过:简单暴力。只要有 AccessDecisionVoter 赞成就通过
  • ConsensusBased
    少数服从多数:AccessDecisionVoter 赞成多于反对(忽视弃权)则通过
  • UnanimousBased
    一票否决:需要全体 AccessDecisionVoter 赞成才算通过

AccessDecisionVoter

  • vote:表决方法、返回值只允许下面 3 种
    • ACCESS_GRANTED = 1 –赞成
    • ACCESS_ABSTAIN = 0 –弃权
    • ACCESS_DENIED = -1 –反对
  • boolean supports(ConfigAttribute attribute): 是否允许对 attribute 进行投票
    attribute 由 SecurityMetadataSource 传递进
  • boolean supports(Class<?> clazz): 是否允许对保护对象进行投票