1、需求场景
之前也有在文章写道 “拦截器\过滤器" 的区别,文章链接,在实际开发过程中,我们可能会遇到拦截请求参数的需求,在这我举个场景。
某一个接口的请求参数都是加密的,而请求参中还有一些跟业务无关的数据,需要剔除。
2、问题产生
那么怎么能够实现只要和业务有关的数据呢?
首先,我们想到的是通过拦截器,对加密的数据进行解密,然后把解密后的数据重新放到 request 中,request.setAttribute("数据名", 数据);
其实呢,还可以通过 @Aspect 注解,在方法里通过 @before,@around 和 @after 注解的方式来拦截数据,配置起来比拦截器简单。
疑惑就在这产生了,通过 @Aspect 注解的方式写的跟拦截器有什么区别呢,他到底是不是拦截器呢?
3、问题总结
3.1、三者不同
@Aspect 注解形式是 AOP 的一种实现。AOP 使用的主要是动态代理 。
过滤器使用的主要是反射 。
拦截器使用的主要是回调 。
3.2、示例分析
前台一个请求过来 ,会先进行过滤器处理,看程序是否受理该请求 。 过滤器放过后 , 程序中的拦截器进行处理 ,处理完后进入 被 AOP 动态代理重新编译过的主要业务类进行处理 。
通过示例去理解三者的不同 ,所以三者不存在所属关系。
博客地址:https://www.cnblogs.com/niceyoo