首页 > 解决方案 > Spring Security - 尽早授权访问

问题描述

我想知道 - 你可以提前拒绝访问(用户已经通过身份验证) ,而不处理整个过滤器链,你可以做同样的事情来授予访问权限吗?

目前我正在研究投票机制(AccessDecisionManager, AccessDecisionVoter),但似乎不可能实现这样的事情。

public class MyVoter implements AccessDecisionVoter<Object> {
    @Override
    public int vote(Authentication authentication, Object object, Collection collection) {
        var principal = authentication.getPrincipal();
        if (principal instanceof MyUserDetails) {
            var myUser = (MyUser)principal;
            if(myUser.isAdmin()) {
                // stop further processing at this point, admin has access anywhere
                return ACCESS_GRANTED;
            }
        }

        // could not decide - forward request to concrete, business logic evaluators
        return ACCESS_ABSTAIN;
    }

    @Override
    public boolean supports(ConfigAttribute attribute) {
        // no custom ConfigAttribute's - process all
        return true;
    }

    @Override
    public boolean supports(Class clazz) {
        // no customization for class - should process ALL requests
        return true;
    }
}

在这里,我只提供了一个虚拟示例,实际授予访问权限的规则更复杂,但我的想法有望得到解释。

标签: springspring-bootspring-security

解决方案


推荐阅读