我听说AOP可用于分离交叉切割方面,如安全性,交易和日志记录等 所以,我想了解如果spring security在内部使用AOP?
答案 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/