2017-09-05 86 views

回答

1

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

您可以在GlobalMethodSecurityBeanDefinitionParser下面的代码是春季安全基础设施的有关全球安全方法的一部分:

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/

+0

GR8。这个运行时间是编织还是编译时间? – samshers

+0

基于代理的AOP是运行时。对于AspectJ,我不太确定,我建议它使用运行时编织,否则将无法通过简单地更改XML(而不重新编译)来重新配置Spring应用程序。 –