1、过滤器,拦截器,切片可以取到数据的差别
过滤器:可以拿到原始的HTTP请求和响应信息,拿不到处理请求的方法值信息。
拦截器:可以拿到HTTP请求和响应信息,可以获取到拦截的类名称、方法名称,不能获取到方法参数,原因是在dispatcherservlet源码中,经过preHandle才对方法参数通过request里面开始处理拼接)。
切片:可以拿到请求方法的传入参数值,拿不到原始的HTTP请求和响应的对象。
2、过滤器filter和拦截器Interceptor的区别
spring的拦截器和servlet的过滤器有相似之处,都是AOP思想的体现,都可以实现权限检查,日志记录,不同的是
适用范围不同:Filter是Servlet容器规定的,只能使用在servlet容器中,而拦截器的使用范围就大得多。
使用的资源不同:拦截器是属于spring的一个组件,因此可以使用spring的所有资源,对象,如service对象,数据源,事务控制等,而过滤器就不行。
深度不同:Filter还在servlet前后起作用。而拦截器能够深入到方法前后,异常抛出前后,因此拦截器具有更大的弹性,所有在spring框架中应该优先使用拦截器。
通过调试可以发现,拦截器的执行过程是在过滤器的doFilter中执行的,过滤器的初始化会在项目启动时执行。
过滤器1开始初始化
过滤器2开始初始化
过滤器1开始工作:http://127.0.0.1:17093/testFi