AOP与Spring Security

时间:2016-11-16 09:17:25

标签: java spring aop aspectj spring-aop

以下这些有什么区别......

@org.aspectj.lang.annotation.Aspect
public class Test {
   //@Pointcut, @Around etc etc..
}

public aspect Test {

}

在...之间使用安全性更好。

  • Spring Security&
  • AOP

在春季应用

3 个答案:

答案 0 :(得分:8)

检查here

  

支持Aspect声明   org.aspectj.lang.annotation.Aspect annotation。声明:

 @Aspect
 public class Foo {}
     

相当于:

 public aspect Foo {}

注意:第一个是春天检测到的。后者需要AspectJ。

对于第二个问题。比较是不可能的。因为第一个是框架,后者是范例。 Spring安全性使用AOP来保护方法调用,AOP本身不是一种安全机制。当然,除非您使用AOP构建自己的安全性,AOP正在重新发明轮子。

答案 1 :(得分:2)

使用Test注释标记您的班级@Aspect会使您的班级成为一个看点,意味着Spring ApplicationContextBeanFactory现在会读取并扫描您的班级找到advicespointcutsjoinpoints,您可以定义您希望为某些事件执行的额外cross-cutting functinality(与业务逻辑分开的功能)在方法调用之前,在方法调用之后,在方法抛出异常之后等。

AOP (Aspect-oriented programming)是设计模式,春天随后为您提供交叉功能,而Spring Security是完整弹簧框架的一部分,您可以使用它来保护您的应用程序

Spring Security在内部使用AOP和Filters来完成其工作。

答案 2 :(得分:2)

第一个是注释样式语法,可以由Spring AOP和纯AspectJ使用,第二个是原生AspectJ语法,仅适用于纯AspectJ,而不适用于基于代理的Spring AOP。但纯粹的AspectJ(由AspectJ编译器编译)也可以合并到Spring项目中,如Spring手册第Using AspectJ with Spring applications章所述。

至于哪种方法更适合实现安全性,只要您没有详细描述您的用例,这就是一个哲学问题,但我的一般建议是:如果您仍然使用Spring框架,也可以使用其安全机制。如果您只考虑使用Spring,因为您想使用Spring AOP,我建议您远离仅用于单一用途的大型框架,并在POJO应用程序中使用纯AspectJ来实现安全性。