Spring Security 内部是否使用 AOP?

sam*_*ers 4 aop spring spring-security spring-aop

我听说 AOP 可用于分离安全、事务和日志记录等跨领域方面。
所以,我想了解 Spring Security 是否在内部使用 AOP?

Rom*_*kiy 5

是的,Spring Security 在内部使用 AOP。例如,它用于全局方法安全。全局方法安全用于对某些方法应用安全检查(例如,在服务层)。

您可以在GlobalMethodSecurityBeanDefinitionParser与全局方法安全性相关的 Spring Security 基础结构的一部分中找到以下代码:

    if (useAspectJ) {
        BeanDefinitionBuilder aspect =
            BeanDefinitionBuilder.rootBeanDefinition("org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect");
        aspect.setFactoryMethod("aspectOf");
        aspect.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
        aspect.addPropertyValue("securityInterceptor", interceptor);
        String id = pc.getReaderContext().registerWithGeneratedName(aspect.getBeanDefinition());
        pc.registerBeanComponent(new BeanComponentDefinition(aspect.getBeanDefinition(), id));
    } else {
        registerAdvisor(pc, interceptor, metadataSource, source, element.getAttribute(ATT_ADVICE_ORDER));
        AopNamespaceUtils.registerAutoProxyCreatorIfNecessary(pc, element);
    }
Run Code Online (Sandbox Code Playgroud)

它几乎在每一行中都提到了 AOP。

可以找到有关全局方法安全性的更多信息,例如,这里https://docs.spring.io/spring-security/site/docs/3.0.x/reference/ns-config.html和这里https://spring .io/blog/2013/07/04/spring-security-java-config-preview-method-security/