通过示例实现 Spring Security AccessDecisionManager

Implementing Spring Security AccessDecisionManager by example

请注意:有人似乎在不加解释的情况下连续 DV 我的问题。这个问题是关于主题的,不是重复的,显示研究并提供 SSCCE。如果您想对其进行 DV 或 CV,那很好,但请提供评论说明原因,以便我有机会解决您的问题...


Spring 引导 2。3.x 和 Spring 此处安全。

我有一些相当复杂的授权逻辑,所以我 相信 我需要编写自己的 AccessDecisionManager impl 并将其连接到我的 WebSecurityConfigurerAdapter impl (如果有任何错误或误解,纠正我!)。

那么,要实现你自己的 AccessDecisionManager 你需要实现 3 个方法,其中之一是:

public class MyCustomAccessDecisionManager implements AccessDecisionManager {

    @Override
    public void decide(
            Authentication authentication,
            Object object,
            Collection<ConfigAttribute> configAttributes) throws AccessDeniedException, InsufficientAuthenticationException {

        // TODO

    }

}

我已经搜索了 Google 高低之神,但对于我来说,我找不到一个有意义的、真实世界的例子来说明 Object objectCollection<ConfigAttribute> configAttributes 论点是什么,它们的用途,打算如何使用它们,以及它们在运行时的一些真实世界(具体)示例。

Authentication 参数很明显:它是我的身份验证令牌,将包含主体,可能是他们的凭据,以及与主体关联的 GrantedAuthorities(权限)列表。

但其他两个参数(objectconfigAttributes )对我来说绝对是个谜。

有谁知道这些论点是什么,它们在现实世界中的一些用例是什么,以及它们的用途是什么?

正如 AccessDecisionManager 的 JavaDoc 所说:

object – the secured object being called

通常,它是 MethodInvocation 接口的一个实例,它表示应该执行调用安全决策的方法。

configAttributes - the configuration attributes associated with the secured object being invoked

它是与安全对象(方法)相关的元数据属性的集合。例如可以包含与该方法相关的注解信息,如@PermitAll@PreAuthorize@PostFilter