0
我听说AOP可以用于分离交叉切割方面,如安全性,交易和日志记录等。
所以,我想了解,如果弹簧安全性内部使用AOP?春季安全使用AOP内部吗?
我听说AOP可以用于分离交叉切割方面,如安全性,交易和日志记录等。
所以,我想了解,如果弹簧安全性内部使用AOP?春季安全使用AOP内部吗?
是的,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/
GR8。这个运行时间是编织还是编译时间? – samshers
基于代理的AOP是运行时。对于AspectJ,我不太确定,我建议它使用运行时编织,否则将无法通过简单地更改XML(而不重新编译)来重新配置Spring应用程序。 –