Spring安全性是否在内部使用AOP?

时间:2017-09-05 13:49:47

标签: spring spring-security aop spring-aop

我听说AOP可用于分离交叉切割方面,如安全性,交易和日志记录等 所以,我想了解如果spring security在内部使用AOP?

1 个答案:

答案 0 :(得分:3)

是的,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);
    }

它几乎在每一行都提到了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/

相关问题